Posts | Comments

Planet Arduino

One of the tasks I dread is configuring a web server to send email correctly via Gmail. The simplest way of sending emails is SMTP, and there are a number of scripts out there that provide a simple method to send mail that way with a minimum of configuration. There’s even PHP mail(), although it’s less than reliable.

Out of the box, Gmail requires OAUTH2 for authentication and to share user data, which has the major advantage of not requiring that you store your username and password in the application that requires access to your account. While they have an ‘allow less secure apps’ option that allows SMTP access for legacy products like Microsoft Outlook, it just doesn’t seem like the right way forward. Google documents how to interact with their API with OAUTH2, so why not just use that instead of putting my username and password in plaintext in a bunch of prototypes and test scripts?

Those are the thoughts that run through my head every time this comes up for a project, and each time I’ve somehow forgotten the steps to do it, also forgotten to write it down, and end up wasting quite a bit of time due to my own foolishness. As penance, I’ve decided to document the process and share it with all of you, and then also make it work on an ESP8266 board running the Arduino development environment.

Before we continue, now would be a good time for a non-technical refresher on how OAUTH works. The main differences between OAUTH and OAUTH2 are that the latter requires HTTPS, and the access tokens that allow an application to use specific services in a user account have an expiry.

To use Gmail with OAUTH2, we will need to start with five things: An application registered in the Google APIs, its client ID and client secret, a computer running LAMP (a by-the-hour VPS works just fine here), and a domain name that points to it.

Registering an application with Google API is easy. Go to the Google API console, log in, create a new project, and enter it. Enable the Gmail API; it should be suggested on the front page.

With the project created and the Gmail API enabled, the dashboard should look something like this

Then click on ‘credentials’ on the sidebar, create credentials, and finally ‘create OAUTH Client ID’. Before you can continue, you need to create a consent screen. The only entry you really need to fill out at this time is ‘Product Name Shown to Users’.

After saving that form, select ‘Web Application’ as your application type. Note the field called ‘Authorized redirect URIs’, we’ll return to it later. It’s important that it be correctly set for us to be able to receive a refresh token later on in this process.

For now, just press ‘Create’. A pop-up will display containing your Client ID and Client secret. You’ll need them soon, so best to copy/paste them into a local file on your computer for now.

Next, we will use those two pieces of data to request an access token and refresh token. We may as well accomplish two things at the same time here by installing the popular PHP email sender called PHPMailer on our web server. It includes a tool to request an OAUTH2 access/refresh token as well as being easily capable of sending a quick test email. To install it, we’ll use the Composer PHP dependency management tool:

$sudo apt-get install composer

Then we should navigate to our web-accessible directory, in my case /var/www/html, and install a few PHP scripts. Note that this should not be done as root, so create another user if needed and give them access to the directory:

$composer require phpmailer/phpmailer
$composer require league/oauth2-client
$composer require league/oauth2-google

Now enter the directory vendor/phpmailer/phpmailer. There will be a script called get_oauth_token.php. Move this script up three directories into the directory you just ran the ‘composer’ commands from. The location of this script as seen from the web needs to be entered into the ‘Authorized redirect URIs’ field of the Google API that we saw earlier. In this case it would have been https://mydomain.com/get_oauth_token.php. Public IP addresses will not work, this is why a domain name pointed to your web server is a requirement.

Now, open get_oauth_token.php in a text editor and paste in your Client ID and Client Secret where needed. Don’t try to run the script locally, it will fail. Open up a web browser on any computer, and navigate to the URL you entered as the ‘Authorized redirect URI’. Then select Google from the list of email services – at this point if it worked you will be asked to log in and then authorize the unverified application, under ‘Advanced’ under the warning prompt, at which point you will finally receive a refresh token. If you only want an access token for some reason you’ll have to edit the script to echo it back.

If that didn’t work, there are two common reasons: a wrong redirect URI or the script cannot find its dependencies. In the former case, the error message from Google will tell you the script URL as it sees it, and you can use that information to update the redirect URI in the Google API Console to fix the issue. For the latter, check your apache error log, probably located in /var/log/apache2/error.log, to see what dependency is not being found. You might see something like this:

PHP Warning: require(vendor/autoload.php): failed to open stream: No such file or directory in /var/www/html/mydomain/get_oauth_token.php on line 59, referer: http://mydomain.com/get_oauth_token.php

If you have received your refresh token, congratulations: the painful part is over. You can just go to the PHPMailer Github page and fill out their OAUTH2 example (gmail_xoauth.phps), and it ought to just work. If all you needed to do is send mail from a project on your VPS, you’re more or less ready to move on to more interesting parts of your project:

$email = 'someone@gmail.com';
$clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com';
$clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';
//Obtained by configuring and running get_oauth_token.php
//after setting up an app in Google Developer Console.
$refreshToken = 'RANDOMCHARS-----DWxgOvPT003r-yFUV49TQYag7_Aod7y0';

Remember to clean up any unnecessary scripts that contain your refresh token and other sensitive data before continuing.

ESP8266: We Don’t Need No Stinking Servers

Now what if we wanted to use these tokens to send email directly from project on a Raspberry Pi without needing a server in the middle? It turns out that once we have the client ID, client secret, and refresh token, we no longer require the server and domain name we’ve been using so far, and a mail-sending application, e.g. PHPMailer, can be installed on a computer anywhere with Internet access as long as it is configured with those values.

Things get a little more complicated when we try to do this on an ESP8266. OAUTH2 requires that we use SSL, and access tokens regularly expire and need to be refreshed. Thankfully, [jalmeroth] generously wrote a proof-of-concept and published it on GitHub. If provided with an access token, it can access your Gmail account and use it to send an email. It can also directly update/get data from Google Sheets, but I didn’t test this. However, if the access token was expired, it couldn’t detect that, although it did include working code to actually request a new token, but not parse it out and use it.

In an attempt to add to the functionality of that proof of concept, I forked the project and made a few changes. First, I changed to order of operations in the code to make it check if the current access token was valid before doing anything else. Second, Google API was responding ‘400 Bad Request’ if the access token was invalid, and everything but ‘200 OK’ responses were being filtered out by the code. Finally, I wrote a couple of JSON parsers that check the reason for the ‘400 Bad Request’ and extract and use the access token returned by Google API when a new one is requested.

It works, but it’s hardly reliable – not surprising considering I’ve never really used the Arduino platform before. Notably, the SHA1 fingerprint for Google API fails often. Checking from my local machine, the SHA1 fingerprint varies between two signatures there too. It would be fairly easy to check for either of them, or just keep trying, but I’d rather understand what’s going on first. (Is it just a CDN or something else?) Or perhaps I should rewrite the whole application in Lua where I’m more competent.

A fun little application built on the above was to place a button on my office that sends an email to my phone. I don’t want people to contact me at that email address frivolously, but do want to know immediately if someone is waiting outside my office. The big red button is for normal requests, but urgent requests require lockpicking. If it’s urgent it better also be interesting.

Finally, did you know that Hackaday provides an API for accessing hackaday.io? It uses the simpler OAUTH (not OAUTH2) authentication, so should be more straightforward than the above to implement on the ESP8266. Have any of you used it?


Filed under: Arduino Hacks, google hacks, how-to, Original Art

The Arduino web team has working hard behind the scenes improving our legacy systems. Now, it’s time to work on something more interesting for the team and more useful for our community! From here on out, we will update you every month on the latest and greatest activities…

Today, we are announcing a pair of major features that are only a mere preview of what you can expect to see from an Arduino user’s point of view:

  • The blog has a new search engine that is much faster, more precise, and allows readers to filter results.
  • The Arduino reference is now quicker,  mobile-friendly, and completely open to contributions. You can check out our GitHub reference repo here.

Let’s look at how those two features work and how they are implemented. The search engine is powered by our provider Algolia, offering an impressively fast search engine and enhanced UX. Our goal is to integrate it with each of our websites and finally have a unified search for all Arduino-related content.

We are going to be testing the search engine for a bit on the blog and eventually roll it out to our websites.

Perhaps what we are most proud of, though, is the new reference engine:

  • Arduino users can directly contribute to the reference by creating a pull request here.
  • We are going to support multiple languages. In fact, some users have already helped us in creating French, German, Korean, Italian, Japanese, Portuguese, and Spanish versions.
  • As soon as a new pull request has been merged, the system deploys to our website automatically, and if someone modifies the English version of the reference, all other language repositories are going to be notified as well.

This is just the beginning with much more to come. Stay tuned!

Years ago, if you wanted to track employee hours, you needed to have them punch a time card. Saunders Machine Works, however, uses a facial recognition system running on an iPad for this purpose, meaning they had to figure out how to sense employees of different heights. What they came up with is a fixture that automatically raises and lowers the tablet, using a stepper motor and linear rails.

The project employs a Lidar sensor on the bottom of the device to detect employee presence, and another above the iPad’s mounting hardware to sense when it’s at the correct height, moving until the top sensor is clear. Control is provided by a pair of Arduino Nanos.

Be sure to check it out in the video below!

There’s a lot more to learning how to play the guitar than just playing the right notes at the right time and in the right order. To produce any sound at all requires learning how to do completely different things with your hands simultaneously, unless maybe you’re a direct descendant of Eddie Van Halen and thus born to do hammer ons. There’s a bunch of other stuff that comes with the territory, like stringing the thing, tuning it, and storing it properly, all of which can be frustrating and discouraging to new players. Add in the calluses, and it’s no wonder people like Guitar Hero so much.

[Jake] and [Jonah] have found a way to bridge the gap between pushing candy colored buttons and developing fireproof calluses and enough grip strength to crush a tin can. For their final project in [Bruce Land]’s embedded microcontroller design class, they made a guitar video game and a controller that’s much closer to the experience of actually playing a guitar. Whether you’re learning to play for real or just want to have fun, the game is a good introduction to the coordination required to make more than just noise.

In an interesting departure from standard stringed instrument construction, plucking is isolated from fretting.  The player fingers notes on four strings but plucks a special, fifth string with a conductive pick that closes the plucking circuit. By contrast, the fretting strings are normally high. When pressed, they contact the foil-covered fingerboard and the circuit goes low. All five strings are made of carbon-impregnated elastic and wrapped with 30AWG copper wire.

All five strings connect to an Arduino UNO and then a laptop. The laptop sends the signal to a Bluefruit friend to change Bluetooth to UART in order to satisfy the PIC32. From there, it goes out via 2-channel DAC to a pair of PC speakers. One channel has the string tones, which are generated by Karplus-Strong. To fill out the sound, the other DAC channel carries undertones for each note, which are produced by sine tables and direct digital synthesis. There’s no cover charge; just click past the break to check it out.

If you’d like to get into playing, but don’t want to spend a lot of money to get started, don’t pass up those $30-$40 acoustics for kids, or even a $25 ukulele from a toy store. You could wind your own pickup and go electric, or add a percussive solenoid to keep the beat.


Filed under: Arduino Hacks, Microcontrollers, Musical Hacks

While many enjoy roller coasters, few can claim the same dedication of engineer Matt Schmotzer, who 3D-printed a 1/25th scale replica of Invertigo, a boomerang coaster at Kings Island in Ohio.

As reported on 3D Printer Chat, the CAD model took only a week to complete, but 3D printing this 4’ x 8’ creation took an incredible 450 hours. This doesn’t include the countless hours spent assembling and debugging it.

The coaster runs on an Arduino Mega, using 42 of the 54 available IO pins. This allows it to not only lift and drop the coaster, but also feature details like actuated gates and restraints to keep the tiny imaginary passengers safe.

Be sure to check it out in the video below!

Your job is to create a random number generator.

Your device starts with a speaker and a membrane. On this membrane will sit a handful of small, marble-size copper balls. An audio source feeds the speaker and causes the balls to bounce to and fro. If a ball bounces high enough, it will gain the opportunity to travel down one of seven copper tubes. Optical sensors in each of the tubes detect the ball and feed data to an Ardunio Mega. When the ball reaches the end of the tube, a robotic hand will take the ball and put it back on the speaker membrane. The magic happens when we write an algorithm such that the audio output for the speaker is a function of how many balls fall down the pipes.

The above is a rough description of [::vtol::]’s art piece: kinetic random number generator. We’re pretty sure that there are easier ways to get some non-determinstic bits, but there may be none more fun to watch.

[::vtol::] is a frequent flyer here on Hackaday Airlines. Where else would you showcase your 8-bit Game Boy Photo Gun or your brainwave-activated ferrofluid monster bath? Would it shock you to find out that we’ve even covered another kinetic random number generator of his?  Fun stuff!


Filed under: Arduino Hacks

Do you and your friends have a favorite cocktail? If so—and if it has three ingredients—then this Arduino-based cocktail machine from YouTuber “GreatScott!” may be worth checking out.

The device is capable of mixing three liquids, which in GreatScott’s case consist of vodka, cranberry juice, and grapefruit juice (also known as a Sea Breeze), in a drink size selected via a rotary encoder and LCD screen.

An Arduino Nano provides the brains for this operation, and each component is poured using a series of three peristaltic pumps. Meanwhile, a load cell underneath the glass holder ensures that the correct amount of liquid is dispensed.

The same setup could be used to make different three-ingredient drinks with a little programming work, or it could be expanded into a multi-drink unit with the addition of a few more pumps. You can see it in action below!

Do you and your friends have a favorite cocktail? If so—and if it has three ingredients—then this Arduino-based cocktail machine from YouTuber “GreatScott!” may be worth checking out.

The device is capable of mixing three liquids, which in GreatScott’s case consist of vodka, cranberry juice, and grapefruit juice (also known as a Sea Breeze), in a drink size selected via a rotary encoder and LCD screen.

An Arduino Nano provides the brains for this operation, and each component is poured using a series of three peristaltic pumps. Meanwhile, a load cell underneath the glass holder ensures that the correct amount of liquid is dispensed.

The same setup could be used to make different three-ingredient drinks with a little programming work, or it could be expanded into a multi-drink unit with the addition of a few more pumps. You can see it in action below!

When the average person looks at a bed, they think about sleeping. Because that’s what beds are for. You cover them with soft, warm cloths and fluffy pillows and you sleep on them. [Peter] is not your average person. He’s a maker. And when he looks at a bed, he thinks about giving it the ability to track his weight.

The IKEA bed has four Chinese-made TS-606 load cells under each foot with custom aluminum enclosures. Each one goes to an HX711 analog-to-digital converter, which offers a 24 bit resolution. These feed an Arduino Nano which in turns connects to a Raspberry Pi via USB to UART bridge. Connecting to the Pi allows [Peter] to get the data onto his home network, where he plots the data to gnuplot.

This smart bed doesn’t just track [Peter’s] weight. It can also track the weight of other people in the house, including his pets. Be sure to check his GitHub for full source code.


Filed under: Arduino Hacks

A lot of the DIY laser engravers and cutters we cover here on Hackaday are made with laser diodes salvaged from Blu-ray drives and projectors, which are visible lasers in the 400 – 450nm range (appearing as violet or blue). Unfortunately there is an upper limit in terms of power on visible diode lasers, most builds max out at 5W or so. If you need more power than that, you’ll likely find yourself looking at gas laser cutters like the K40. While the K40 is a great starting point if you’re looking to get into “real” lasers, it’s a very different beast from the homebrew builds using visible lasers.

With a gas laser the beam itself is invisible, making it much more difficult to align or do test runs. One solution is to add a visible laser to the K40 which can be used to verify alignment, but making sure it’s traveling down the same path as the primary laser usually requires an expensive beam combiner. Looking to avoid this cost, [gafu] wanted to see if it was possible to simply move the visible laser into the path of the primary beam mechanically.

An adjustable microswitch detects when the lid has been opened.

In the setup that [gafu] has come up with, a cheap laser module (the type from a handheld laser pointer) is moved into the path of the primary laser on an arm that’s actuated by a simple hobby servo. To prevent the primary and visible lasers from firing at the same time, an Arduino is used to control the servo given the current state of the K40’s lid. If the lid of the K40 is open, the primary laser is shutoff and the visible laser is rotated into position so the operator can see where the primary laser’s beam would be hitting. Once the lid is closed, the visible laser rotates out of the way and the primary is powered back up.

Running the cutting or engraving job with the lid of the K40 machine open now let’s [gafu] watch a “dry run” of the entire operation with the visible laser before finally committing to blasting the target with the full power beam.

We’ve covered many hacks and modifications for everyone’s favorite entry-level CO2 laser cutter. From replacing the controller to making it bigger, K40 owners certainly seem like a creative bunch.


Filed under: Arduino Hacks, hardware, Laser Hacks


  • Newsletter

    Sign up for the PlanetArduino Newsletter, which delivers the most popular articles via e-mail to your inbox every week. Just fill in the information below and submit.

  • Like Us on Facebook