Oct 01

Dynamic DNS with NameSilo and PowerShell

Most people have cable internet and with ISPs like this you will notice that your IP changes from time to time. This causes headaches if you want to know how to access devices at your home network from a remote location. The typical solution to this is to use a Dynamic DNS provider. At one time it was DynDNS but they eliminated their free option years ago. I’ve been using the free option from No-IP but after the whole seized domain issues last summer I decided to look for another alternative. I was already looking for a new registrar for the domain names I own and after much research decided to switch to NameSilo. They had the best prices I could find and they also had a solution to the Dynamic DNS issue.

API Access

NameSilo, in addition to a number of other great features, also provides API access to manage domains. Once I found this out it was only a matter of writing some code to do it. In this example I created a PowerShell script to run as a scheduled task on a Windows machine but it would be similarly easy to write it in any programming language. First you need to get your API key:

Get an API Key

Go to the API Manager page and check the box for “Generate New API Key” and the checkbox to accept the API terms of use then click “Next”.

NameSIlo01

The following screen will show you the API key to be used in the next step

NameSIlo02

Create the PowerShell File

Below are the PowerShell commands that will compare the current public IP and if the DNS entry is doesn’t match the script will update it. The variables are all at the top of the list. Copy the code below and paste it into a text editor, change the APIkey, the domain you want to work with and the host you want to update (this should be a pre-existing A Record). In this example we’re update dyn.forkrobotics.com. Once you’re done save the file as NameSiloDDNS.ps1

# NameSilo API Dynamic DNS
#Variables
$APIkey = "49d7202378997443f699a016”
$domain = "forkrobotics.com"
$record = "dyn"

###Code - Do not edit below this line
# Gather data about the DNS entries in the domain
$listdomains = Invoke-RestMethod -Uri "https://www.namesilo.com/api/dnsListRecords?version=1&type=xml&key=$APIkey&domain=$domain"
$CurrentIP = $listdomains.namesilo.request.ip
$RecordIP = ($listdomains.namesilo.reply.resource_record|where {$_.host -eq "$record.$domain"}).value
$RecordID = ($listdomains.namesilo.reply.resource_record|where {$_.host -eq "$record.$domain"}).record_id
$listdomains.namesilo.reply

# If the current IP address is not the same as the one in the record it updates it
if ($CurrentIP -ne $RecordIP){
$update = Invoke-RestMethod -Uri "https://www.namesilo.com/api/dnsUpdateRecord?version=1&type=xml&key=$APIkey&domain=$Domain&rrid=$RecordID&rrhost=$record&rrvalue=$CurrentIP&rrttl=3600"
$update.namesilo.reply
}

Scheduled Task

Now we need to create a scheduled task for this to run automatically.

  1. Click Start and search for “Task Scheduler” or “Schedule Tasks” (depending on which version of Windows you’re on)
  2. Click “Create Basic Task”
  3. Name the Task & click Next
  4. Select Daily for when to run the task (you can set it to run more or less frequently if you like) & click Next
  5. Pick a time to run the script & click Next
  6. Pick “Start a Program” and click Next
  7. In the Program text box type “PowerShell.exe”
  8. In the “Add Arguments” box type “-ExecutionPolicy Bypass C:\scripts\NameSiloDDNS.ps1” & click Next
  9. Click Finish

 Next Steps

This is a simple script and is effective for Windows machines, however many of us use other platforms that will not run PowerShell commands. The next steps would be to recode this for a Linux based language.

Nov 08

Clean a Soldering Iron Tip with a Dremel

A little over a year ago I noticed that my soldering was becoming messy and I wasn’t getting the same clean results that I used to. It was taking longer for the solder to flow and when it did it wouldn’t form a solid joint. I tried raising the temperature of the soldering iron, I tried a different solder, switched to a brass sponge instead of a wet sponge (a worthwhile upgrade) and tried using a tip tinner and cleaner. Nothing I tried worked so I decided to buy a new tip for my soldering iron. When the new soldering tip arrived it became obvious why I was struggling. Comparing the new tip with my old one I could see that after more than a year of using my soldering iron the tip had built up a significant layer of oxidation.

Solder tip new and used

Instead of putting on the new tip I decided to try to get some more life out of my old one.. I pulled out my Dremel and put in the 280 grit buffing wheel. After a few quick passes my soldering tip looked just as good as the brand new one and worked great. I made a video to demonstrate how you can clean your own soldering iron tip at home.

If you feel like soldering is harder than it used to be you might have the same issue. I highly recommend this method for cleaning the oxidation off of your soldering iron tip. Not only will you get cleaner results when soldering, you can save yourself some money by extending the life of your current soldering iron tip.

Jul 29

Using Raspberry Pi to Control a TinyG ShapeOko

When I put together my ShapeOko CNC I decided to use a TinyG as the controller. It’s a great board with a lot of support behind it, however the TinyG is strictly a controller for the mill’s motion. The G-Code commands need to be read in though a serial connection and it only has a buffer of 255 characters which means it requires that a computer be connected to send the commands. Instead of leaving my laptop with the ShapeOko I decided to use a Raspberry Pi for this purpose. Most of the documentation around the TinyG is based on Windows or Mac; there is not much info on using it with Linux. This is currently the way I’m using the Raspberry Pi to control the TinyG.

Finding the Serial Port

The first thing you need to do is find which serial port the TinyG is on. The easiest way to find it is by running the command:

dmesg|grep FTDI

It will respond with something similar to this:
dmesg_grep_ttyUSB
I’ve highlighted the line you should look for. Unless you have another USB to serial device connected (like an Arduino) yours should also show up as “/dev/ttyUSB0″. In the following examples the assumption is that this is the address for the TinyG. If yours is different then you may need to change the commands below.

Putty and Plink

The commonly recommended program to communicate with the TinyG is a freeware (not open source) program called CoolTerm. It does have a Linux version however it is compiled for x86 processors so it will not run on a Raspberry Pi’s ARM CPU. An alternative program that can do the job and will be familiar to at least a few IT people is Putty. It is a free, open source terminal emulator and serial console for Windows and Linux. Putty is a GUI based program and it can be used, however I find it easier to use the command line version: Plink.

One of the benefits of using Putty is that it supports XON/XOFF flow control protocol. As I’ve mentioned, the TinyG can only buffer up to 255 characters before erratic behavior, missed lines and other trouble start cropping up. TinyG utilizes XON/XOFF to tell the sending computer to stop sending commands when its buffer is almost full and continues when it gets below a certain level.

Install Putty and Putty Tools

Putty is available in the Debian based software repositories (this includes Raspbian and Ubuntu). You can install Putty and Plink on a Raspberry Pi with this command:

sudo apt-get install putty putty-tools

Open the Serial Console

To connect directly to the TinyG using the command line version use this command:

plink -serial /dev/ttyUSB0 -sercfg 115200,8,n,1,X

This will open an interactive serial console that can send and receive commands. From here you can fully interact with the TinyG.

Stream G-code Files

The next step once you’ve configured all your settings and run some simple commands is to be able to send a whole file of G-code to the ShapeOko. You can do this by piping the file to plink like this:

cat project.nc | plink -serial /dev/ttyUSB0 -sercfg 115200,8,n,1,X

In this example the file “project.nc” would contain a series of G-code commands and plink would send those to the TinyG.

Exiting Plink

The shortcut to exit plink is CTRL+C. You can also use CTRL+Z but this simply suspends the program instead of closing it (Explanation of the difference between CTRL-C and CTRL-Z in Linux CLI).

Next Steps

The method above will give you the basic ability to directly communicate with the TinyG or stream of G-code into the TinyG, however it doesn’t give you a visual interface and you still need to find a way to get the G-code files to the Raspberry Pi. I started writing a web interface based on PHP and have spoken with Alden from Syntheos who invited me to help with their NodeJS based web interface, hopefully I will have more on this in the near future.

Jun 03

Using the GY80 10DOF module with Arduino

I recently purchased a 10 Degrees of Freedom (10DOF) sensor from eBay called a GY-80. It’s a compact module that includes a gyroscope, accelerometer, digital compass, and a barometric pressure / temperature sensor.

GY80 Top Labeled

All of the individual sensors are accessible over I2C so you only need 4 connections to access all those sensors. SDA, SCL, Ground and VCC (you can use 3.3v or 5v).

GY80 Bottom Labeled

Each component can be accessed individually. I was planning on doing a write-up on each one, but it looks like Bildr beat me to the punch as they already have a great tutorial for each component. Here are the links to the datasheets and tutorials for each component:

L3G4200D

3 axis gyroscope from ST
L3G4200D Datasheet
Bildr Tutorial: http://bildr.org/2011/06/l3g4200d-arduino/

ADXL345

3 axis accelerometer from Analog Devices
ADXL345 Datasheet
Bildr Tutorial: http://bildr.org/2011/03/adxl345-arduino/

HMC5883L

3 axis digital compass from Honeywell
HMC5883L Datasheet
Bildr Tutorial: http://bildr.org/2012/02/hmc5883l_arduino/

BMP085

Barometric Pressure and Temperature Sensor from Bosch
BMP085 Datasheet
Bildr Tutorial: http://bildr.org/2011/06/bmp085-arduino/

Next steps

This module can be used individually as the articles above show but they can also be monitored at the same time. MultiWii is an open source software project that is used as the brain of multi-copter projects. The code runs on Arduino and it is compatible with a large variety of sensors (the GY80 being one of them). It does require a little tinkering to get it working properly. I’ll document the process in a future article. Also since this module works over I2C it can also be accessed using a Raspberry Pi.