Category Archives: OpenWRT

Arduino OpenWRT USB connection

This central heating monitoring system I am working on is built around an Arduino Uno. I want to hook it up to a Asus WL-500g deluxe router running OpenWRT. I found that this router has an internal header with two serial ports and I was planning to use one of these ports to link to my Arduino.

Pondering how I was going to do the logic level shifting from the 3.3V on the Asus to the 5V on the Arduino, I wondered if it would be easier just hooking up the Arduino via one of the two USB ports on the Asus WL-500g deluxe router. Plugging in the Arduino via USB did not look very promising, a dmesg only showed:

usb 2-1: new full speed USB device using uhci_hcd and address 2

Plugging in the Arduino on my Ubuntu Linux desktop showed that the Arduino is a “USB ACM” device:

[25009.512051] usb 3-3: new full speed USB device using ohci_hcd and address 4
[25009.731110] cdc_acm 3-3:1.0: ttyACM0: USB ACM device

So, I needed some kind of ACM driver for OpenWRT. A quick search revealed that I needed the usb-acm kernel module, so that is what I installed:

root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg list | grep -i acm
kmod-usb-acm - 2.6.32.16-1 - Kernel support for USB ACM devices (modems/isdn controllers)
root@OpenWrt:~# opkg install kmod-usb-acm

Plugging in the Arduino now shows the right logs in dmesg:

usb 2-1: new full speed USB device using uhci_hcd and address 3
usb 2-1: configuration #1 chosen from 1 choice
cdc_acm 2-1:1.0: ttyACM0: USB ACM device

So we can now use /dev/ttyACM0 to talk to the Arduino. Ciao, mondo!

root@OpenWrt:~# ls -l /dev/ttyACM0
crw-rw-rw-    1 root     root     166,   0 Oct 25 23:36 /dev/ttyACM0