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