Tuesday 24 July 2012

Connecting an Arduino Uno to OpenWRT Part2

More OpenWRT progress and a few more issues resolved.

One of the issues I run into was the microSD cards becoming write protected. Even after removing the cards they were write protected on every other device I tried to connect then too. With full size SD cards there was a small switch to enable write protect but not with the microSD cards. I did read a few tricks like using a microSD to SD card adapter then disabling the write protect and formatting the cards but this did not work for me. Not wanting to run into this issue again I have just replaced the microSD cards with USB memory sticks.

Installing OpenWRT to a MR3020n.
Ok I have reinstalled openWRT a few times now and almost have it down to a fine art. This is not a full walk through but the key steps to get openWRT installed and working with a USB memory device. I did connect a TTL serial cable to the router so I did not have to play around with the networking side of things too much.
  1. Format the USB drive with the EXT2 file system, under Windows you can use Free EaseUS® Partition Master 9.1.1 Home Edition
  2. Flash the base image to the router. You can use the web interface to upload the firmware update of if you have a console and the router connected to the web you can use these two commands 
    wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin

    mtd -r write *mr3020*.bin firmware
  3. Now after the router reboots it will have the IP of
    before able to SSH to the router you will need to Telnet to it and using the passwd command set a password.
  4. Configure the network settings. You will need to edit /etc/config/network using vi to match the settings of your network. For me that is just enable DHCP so the settings will look this 

     config interface 'loopback'
         option ifname 'lo' 
         option proto 'static'
         option ipaddr '' 
         option netmask ''

     config interface 'lan'
         option ifname 'eth0'
         option type 'bridge'
         option proto 'dhcp'
  5. Now you need to reboot and reconnect using the new settings. If using the DHCP and you are not sure what IP the router has you can connect to your DHCP server for the lease details. I cheated and just used the serial console.
  6. Now we need to start installing support for the USB drive and filesystem. We want to install as little as possible until we have the USB driver mounted.

    opkg update

    This will download a list installable packages and needs to be done after every reboot.

    opkg install kmod-usb-storage block-mount kmod-fs-ext4

    This will download a list install the minimum kernel drivers and dependencies.

  7. Now to setup the overlay we need to copy the existing overlay files across. So we need to use the following commands

    mkdir /mnt/usb

    So we have somewhere to mount the drive

    mount -t ext2 /dev/sda1 /mnt/usb -o rw,sync

    To mount the drive

    tar -C /overlay -cvf - . | tar -C /mnt/usb -xf -

    To copy the data across

    Now to update fstab to use the sda1 as the overlay 
    vi /etc/config/fstab

    and should look like this
    config mount
            option target        /overlay
            option device        /dev/sda1
            option fstype        ext2
            option options       rw,sync
            option enabled       1
            option enabled_fsck  0

    Now reboot
  8. If all when well if you df -h you should see that you have gone from just a few KB of free space to a few GB of space. Now we can install anything we want and not have to worry about space. So for most people the first thing to do is install and setup the web interface. Just type the following commands

    opkg updateopkg install luci/etc/init.d/uhttpd enable/etc/init.d/uhttpd start
    Now you should be able to open the web interface of the router.
  9. To install a webcam (Logitech c270) use the following command

    opkg install kmod-video-core kmod-video-uvc mjpg-streamer
    This will install the uvc camera driver which is supported by many different webcams and it will install mjpg-streamer which will allow you to stream the webcam.
    To get mjpg-streamer start automatically you need to enable the service ether in the web interface or by running

    /etc/init.d/mjpg-streamer enable

    You may also want to edit


    I found that some resolutions like the default 640x480@5fps showed a lot of JPG corruption so I tried a few other resolutions and found 1280x720 worked nice but ended up settling on 720x350@10fps

    After editing the settings you will need to stop/start/restart the service for the new settings to take effect
    /etc/init.d/mjpg-streamer stop
    /etc/init.d/mjpg-streamer start

    You should be able to view the webcam via 


  1. I think it should say "connecting" instead of "connection" lol

    1. Thanks Randy, The bigger issue I have been struggling with is trying to keep the code snippet formatting. It keeps removing the linefeeds after I post so a multi line code snippet turns into a single line mess.