Tuesday, February 12, 2013

Forcing Serial device to use the same Serial port

EDIT: Note, that this caused an error that I'm currently trying to work out. I'll remove this once I've figured it out. Basically, it doesn't treat the second device as a serial port.

Note, that I'm currently writing this to use on my Raspberry Pi to make it work better with BotQueue's client software, bumblebee. When you unplug a usb serial device, and plug it back in, the serial port changes.  So, if you have it as /dev/ttyACM0, unplug it and plug it back in, you'll see it's now at /dev/ttyACM1.

Throughout this tutorial, I'm going to use /dev/ttyACM0 since that's the current port of the device I'm trying to get to stay.  Note, that this is a device rename, not a symlink. I'll be using /dev/ttyJasmine for the new port since Jasmine is the name of my printer.

First up, let's find some info about the device:
udevadm info -q property -p $(udevadm info -q path -n /dev/ttyACM0)
It should spit out some info. The line that we need to pay attention to is ID_SERIAL_SHORT.

So in the case of my arduino, (excluding all irrelevant fields):
ID_SERIAL_SHORT=<removed for the blog post>
Now it's time to set up what's called a udev rule.  Run the following command, replacing nano with your editor of choice: (Note, that I chose 45 arbitrarily. Just for fun, you might want to research how the numbering system works)
sudo nano /etc/udev/rules.d/45-serial-devices.rules
Go ahead, and add the following line, replacing the items in < > their appropriate values.  So in my case, I'd replace <SUBSYSTEM> with tty and <ID_SERIAL_SHORT> with the serial device I found earlier. (Note, that this is all one line)
SUBSYSTEMS=="usb", ATTR{serial}=="<ID_SERIAL_SHORT>", NAME="ttyJasmine", GROUP="dialout", MODE="777"
Go ahead and save the file. After a fresh reboot, you should see your device have the name that you assigned to it.  If not, then run the following command to see what the problem might be:
cat /var/log/daemon.log | grep udev
Remember to change your config.json to use the new port if you did this for botqueue.

Saturday, February 2, 2013

Run Bumblebee on Raspberry Pi boot

In my last post, I showed you how to set up a raspberry pi with BotQueue. This time, I want to show you how to start it on boot.

First, let's create an executable script to run bumblebee with a single command. I'm doing this so that if I ever change the directory BotQueue is in, I only have to change one file. So to edit the new executable, run the following command (replacing nano with your text editor of choice. I use vim personally):
sudo nano /usr/bin/bumblebee
You should be presented with a blank file. Add the following lines to it, before saving and exiting (replacing /home/pi/BotQueue/bumblebee/ with wherever you put bumblebee. Note that you should not use ~, but instead /home/pi/):
cd /home/pi/BotQueue/bumblebee/
python bumblebee.py
After that's saved, you need to allow people to execute it. Type this to get the desired effect:
sudo chmod a+x /usr/bin/bumblebee 
Of course, you should run "bumblebee" now to see if it worked. Next up, we need to make the user automatically login on tty1. Again, I'm assuming you are using the pi user here. If you aren't then just change the username in the instructions accordingly. First, edit the /etc/inittab file. You'll need sudo permissions, of course:
sudo nano /etc/inittab
Find the line that looks like this:
1:2345:respawn:/sbin/getty 38400 tty1
Change it to this:
#1:2345:respawn:/sbin/getty 38400 tty1
And add this below that line (replacing pi with the username you want logged in and running bumblebee with):
1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1
 Good good. Now, in the home directory of the user you did that too (in most cases, that'll be your own), edit the ".profile" file. (notice the '.' at the beginning of profile):
nano .profile
At the bottom, add the following lines (If you don't care about the terminal screen going blank, leave out the setterm line):
if [ $(tty) = /dev/tty1 ]; then
    setterm -blank 0
    sleep 10
And now, just run this command to reboot:
sudo reboot
There you go. Once you have gone through a reboot, the program should be running in the main terminal window, while still giving you the ability to ssh in. The only problem with this is that you can't type things like q to quit the program. This is a problem with bumblebee, which I'm hoping to eventually fix. Although, I wrote this tutorial and the last one all over ssh, so it's completely possible to not need a keyboard on the host computer.