Chibi/OS

Using NetBeans and Gnu ARM tools, I was able to build and run the ChibiOS/RT demos for the STM32F4 discovery board.  I downloaded the zip file containing the latest version of ChibiOS/RT and extracted it to my NetBeansProjects folder.  To build a project:

  • File -> New Project -> C/C++ -> C/C++ Project with Existing Sources
  • Browse to the appropriate directory e.g:
    • …./NetBeansProjects/ChibiOS_2.6.7/demos/ARMCM4-STM32F407-DISCOVERY
  • Select Tool Collection as GNU ARM
  • Select Automatic Configuration Mode

That’s it, the project is imported and automatically builds!  You can load it onto the target using st-flash and debug it (if desired) using st-util:

  • st-flash write \Users\dalbert\Documents\NetBeansProjects\ChibiOS_2.6.7\demos\ARMCM4-STM32F407-DISCOVERY\build\ch.bin 0x8000000
  • st-util  (make sure you’ve configured build/ch.elf as the project Properties->Build->Make->Build Result)

I’ve built and tested the three STM32F4-DISCOVERY demos and they all ran successfully including the VCP USB comm port with command interpreter in the MEMS demo.

I’ve also built the ChibiOS/RT + lwIP + PPP application here which required a few fixes and must be linked with ChibiOS/RT 3.x but then runs nicely using the serial port (PA2, PA3) to serve a PPP connection.  I have two directories under NetBeansProjects:
stm32f4-chibios-lwip-pppos-master
ChibiOS_3.0.x
Then I create a symlink under stm32f4-chibi-…-master/lib called ChibiOS-RT that links to ../../ChibiOS_3.0.x.

On the remote terminal (linux box) side, I configured /etc/ppp/options including the serial port I was connected to (/dev/ttyUSB0) and the baudrate (38400); the whole file looks like this:

# Prevent pppd from forking into the background
-detach
debug
/dev/ttyUSB0
38400
# wait for connection if none initially found
passive
# no hardware flow control
nocrtscts
# don’t use modem control lines
local
# create a default route for this connection in the routing table
defaultroute
# no authorization required
noauth
# ensure exclusive access to the serial device
lock
# do not set up any escaped control sequences
asyncmap 0
# use a maximum transmission packet size of 552 bytes
mtu 552
# use a maximum receive packet size of 552 bytes
mru 552
# IP stack configuration
netmask 255.255.255.0
noipdefault
:

Launch pppd specifying localip:remoteip: which generate the ppp0 network interface (shows on ifconfig):

sudo pppd 172.30.1.98:172.30.1.99

Reset the discovery board and the PPP connection is up!  You can ping the discovery board (ping 172.30.1.99) and can bring up a remote shell connection using netcat: nc 172.30.1.99 25  (note to send a CR requires Ctrl-V <enter><enter>).

 

Cortex Cross Development Environment

I’ve been using ARM processors with C/C++ for more than a decade for nearly all of my embedded development.  I’ve usually used Em::Blocks on Windows platforms which works nicely but doesn’t fully work on linux, doesn’t support integrated version control, and hides some details that I want to have control over.

I’m working on some new projects using Cortex M3 and M4 processors and wanted to explore the available tools.  My favorite IDE is still NetBeans.  Netbeans was meant for Java, but has a C/C++ plugin and is fairly easy to configure for gcc cross-compilation using gnu tools for arm (linux/mac/windows).  I’d really like to get the environment working both on windows and linux since I routinely use both.  This post details the linux setup:

1) Download and install the GNU tools for ARM in /usr/local/gcc-arm-none-eabi-…:

cd /usr/local
sudo tar xjf ~dalbert/Downloads/gcc-arm-none-eabi-*.bz2

Add the tools to the search path (add the following to ~/.bashrc):

PATH=$PATH:/usr/local/gcc-arm-none-eabi-4_9-2014q4/bin

2) Install the C++ plugin for Netbeans and configure NetBeans to use add the new arm cross-compilation toolchain:

Tools->Options->C/C++->Add the configure the base directory (e.g. /usr/local/gcc-arm-none-eabi-4_9-2014q4/bin) and the c, c++, assembler, and debugger programs to arm-none-eabi-gcc, arm-none-eabi-g++, arm-none-eabi-as, arm-none-eabi-gdb.  I add the cross tools as GNU_ARM

3) Install the GDB Server plugin for Netbeans.  This allows you to attach NetBeans debugger to the remote target using the configured gdb debugger (arm-none-eabi-gdb per the above step).  To debug, Debug->Attach Debugger, choose debugger type as “gdbserver”, choose target as “remote:4242”, and set the project to your project.

4) For hardware assisted debugging, the STMlinkv2 software works with the STLink USB JTAG/SWD debug hardware ($30 from Digikey and included free with any ST Discovery board; I like this one that costs $10 at Digikey); documentation is here.

Install texane stmlinkv2 (for linux, install the packages required to build stmlinkv2: autotools autoconf autogen libusb-1.0.0 and maybe libusb-1.0.0-dev, intltool) see here and here for more info.  Windows binaries are here.  Included is st-flash for flashing the processors, st-info, st-term, and st-util: a GDB server.  For Windows, just unzip the folder to a convenient location and run st-util.  For linux, after installing the dependencies (listed above), build STMLinkV2 and install it (installs in /usr/local/bin):

./autogen.sh
./configure
make
sudo make install

Grant permissions for the tools (e.g. st-util) to access the USB ST-Link V2 hardware:

sudo install -m 644 49-stlinkv2.rules /etc/udev/rules.d/49-stlinkv2.rules
sudo udevadm control –reload-rules

More info on permissions for st-util

5) Download sample code and create a project for one of the examples.  I keep my NetBeans projects in my home directory in a NetBeansProjects directory:

File->New Project->C/C++ Project with Existing Sources->~/NetBeansProjects/kkstm32_base-master/example/32l_lcd
Set the Tool Collection to GNU_ARM and select Automatic configuration mode then press finish.
Note: the STM32 library in the downloaded example code I’ve linked to contains an error in core_cm3.c that must be fixed (add the ‘&’ in front of result r); see diffs below:

dalbert@mypc ~/NetBeansProjects/kkstm32_base-master/libs_stm/inc/core_support $ diff core_cm3.c.orig core_cm3.c
736c736
<    __ASM volatile (“strexb %0, %2, [%1]” : “=r” (result) : “r” (addr), “r” (value) );

>    __ASM volatile (“strexb %0, %2, [%1]” : “=&r” (result) : “r” (addr), “r” (value) );
753c753
<    __ASM volatile (“strexh %0, %2, [%1]” : “=r” (result) : “r” (addr), “r” (value) );

>    __ASM volatile (“strexh %0, %2, [%1]” : “=&r” (result) : “r” (addr), “r” (value) );

cd kkstm32_base-master/libs_stm/build
make     (to build the STM32 peripheral library)
cd kkstm32_base-master/example/32l_lcd
make     (to build the example code – builds lcd.elf, lcd.bin)

6) Build and load one of the examples built above into your STM32L Discovery eval board using the CLI first to confirm that everything is working:

st-flash write lcd.bin 0x8000000
test the other nifty st tools: st-info, st-term, st-util

7) Test debug interface from CLI:

st-util   (runs gdb-server which listens on localhost:4242)
arm-none-eabi-gdb -q lcd.elf
(gdb) target remote localhost:4242

8) Optionally install openocd (gdb server compatible) and test it for debugging:

sudo apt-get install openocd       (installs to /usr/share/openocd)
openocd –version
sudo openocd -f /usr/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/share/openocd/scripts/target/stm32lx_stlink.cfg
in another window: telnet localhost 4444

9) Import one of the example projects into NetBeans and test operation in the IDE!

File->New Project->C/C++->C/C++ Project with Existing Sources
Choose source folder and GNU_ARM tool collection
Select Automatic Configuration Mode
Right click the project->Properties->Build->Make->Build Result = build/ch.elf

Make sure the Makefile is compiling the project with debugging enabled (-g)

Other links related to setting up a gnu/arm cross development environment:

  • https://github.com/texane/stlink/wiki   (wiki for the stlink tools)
  • http://gpio.kaltpost.de/?page_id=148  (detailed discussion of stlink tools)
  • http://embeddedprogrammer.blogspot.co.uk/2012/09/stm32f4discovery-development-with-gcc.html  (very detailed article on eclipse, openocd, and a wide range of cross tools)
  • http://hertaville.com/2013/09/02/stm32f0discovery-part-1-linux/
  • http://gnuarmeclipse.livius.net/blog/test-project/
  • LibOpenCM3
  • http://www.ba0sh1.com/opensource-stm32-development/
  • http://false.ekta.is/2012/05/using-netbeans-for-stm32-development-with-stlink-texane/
  • http://www.emb4fun.de/arm/lwipuhttp/
  • https://bitbucket.org/philpem/stm32_spl   (STM32 peripheral library)

Next steps:

Solar Power

I’m considering adding solar power to my house.  I’m not interested in leasing.  The cost of solar power continues to plummet and now soft costs (non-hardware) are about half of the total cost.  The national average cost installed before incentives is now around $3.6/Watt and Maryland costs are around the national average.  Interestingly, America is still the most expensive country in which to install photovoltaics; in Germany it is *much* less expensive…the free market doesn’t seem to be working so well in that regard (much like our health care or telecommunications systems).

Although the green aspects of solar power appeal to me, it needs to make financial sense too.  In 2014 I paid $2130 for delivery of an average of 1328kWh/month = $178/month ~= $0.134/kWh.   electricity.  Given Maryland’s daily hours of insolation (around 4.2), to offset my usage I’d need a 15kW system which would cost around $54K before incentives/rebates/etc.

I met with a reputable local solar installer and received a quote; they performed a detailed analysis of my house roof and estimated that my maximum array size would be 46 panels x 270W/panel = 12.42kW.  Given the panels’ locations, angles, etc. they estimated that they would generate 1093 kWh/kW/year or 13,570kWh/yr.  They did not use any sales pressure tactics and were very professional.  They used some higher end equipment and their terms are outstanding; the total cost was estimated at $48,680 (before credits) or $3.92/installed Watt which is somewhat higher than average ($3.6) but not unreasonably so given their warranty/support.

There is currently a federal 30% rebate and a $1K Maryland tax credit on the purchase of panels which brought the installed price to $33,426 ($2.69/installed Watt).  Maryland further adds Solar Renewable Energy Credits or SRECs for the energy you actually generate which traded at an average of $0.14/kWh in 2014.  This would yield an additional $1900/yr, but there’s no telling how long that will last.

The panels are permanent…the cost to remove and re-install would be prohibitive so they effectively become a part of the house.  Moreover, the cost of solar (and therefore the value of the panels) will continue to decline; the SunShot initiative targets an installed cost of $1 per installed Watt by 2020 and panel and inverter technology will surely continue to improve and the panels themselves have a limited (20-30 year) life…usually 25 year guaranteed.  So you can assume the panels have no value at the end of their life.

In some ways, with SRECs, this looks pretty appealing: $4K/yr * 25 years = $100K which corresponds to a 4.5% rate of return on the original $33K investment.  Moreover, although it has declined recently, electricity inflation has averaged 2-3% for the last 20 years, so the rate of return is really more like 6.5% to 7%.

The remaining question for me is how the scenario plays out if you sell your house before the end of the panels’ life (i.e. if you sell after 10 years, what value do the panels retain since they will continue to generate money for at least another 15 years)?

Update: Although I was very impressed with the solar company: Astrum Solar (now Direct Energy Solar) I ultimately decided against it.  If I were very confident I’d be in this house 10 years from now, I would buy the panels and I’d buy them from Astrum – they were very professional.  However the numbers didn’t work for me.  My house is fairly energy efficient and we have gas heat and hot water so our electric bill is already pretty low.  As a result, the ROI was 10+ years and if we decided to move after the kids were in college (6 years!), we’d potentially take a big loss on the system.  A realtor friend told us that panels don’t really affect the house price one way or the other; i.e. the panels would convey for free to the next owner or we’d have to go through an expensive process to have them taken down, shipped, and re-installed on the next house.  It’s just too big a risk.

It really amazes me that so many people enter into very long-term solar leases given the onerous costs if the lease is broken.  Leasing effectively requires any future buyer to assume the lease which might seriously encumber a sale.

BG7TBL USB RF Signal Generator

Some time ago, I purchased a super-cheap RF signal generator on eBay from fly_xy.  It was the same as this item.  This is yet another version of the the popular BG7TBL signal generator and “simple spectrum analyzer”.   It cost $65 and covers 138MHz through 4.4G; for another $20, you can get one that goes down to 35MHz.  It’s certainly not lab gear, but for the price and size, it’s still decent; the main challenges are the software and the resolution bandwidth.

USB RF Signal Generator

Harmonics are not attenuated; with the generator configured to output a 915Mhz CW signal, the fundamental lands at 914.993Mhz @ -5dBm signal (7ppm error), pretty clean to -40 to -50dBm, acceptable to -70dBm.  However the harmonics are ugly: 3rd = -13dBm, 4th = -24dBm, 5th = -36dBm, 6th = -48dBm, etc.

Inside are:

  • AD8307 500MHz demodulating log amp
  • AD4350 RF synthesizer
  • IAM 81008 Mixer
  • ATMega processor
  • FTDI FT232RL USB to serial interface
  • AMS1117 super cheap LDO

A review (translated from Polish) that measures harmonics and frequency accuracy and such:  http://sztormik.com/Radio/Wpisy/2014/10/1_BG7TBL_measurements_files/bg7tbl_lo_meas.pdf

It would be *much* more useful with selectable RBW filters; as it is, I can’t resolve much detail finer than 200kHz, so an FM signal with 25kHz deviation will look the same as an FM signal with 100kHz deviation.  See the pictures below for some sweeps of the 2m band.  The NWT4000 or NWT4000-2 might be more capable (but they are sufficiently more expensive that it would be better to buy a real piece of lab gear like a used R&S CMU200 – even though it is admittedly much larger).

Sweep of 2m band

2m band

Close-up of signal in 2m band

The software it uses is open-source LinNWT / WinNWT which supports many similar devices.  The English language documentation is not great and because the native language is German, there’s not much English language support.  A German magazine article is here it looks like it would be very useful if translated into English.  The author (Andreas) is friendly and helpful and responds to email.

To run WinNWT in English on windows, use the command (in the Target field of the shortcut properties):

“C:\Program Files (x86)\AFU\WinNWT4\winnwt4.exe” app_en.qm

To build/run the software on linux:

  • Download latest .tgz source here
  • Install tools if needed: sudo apt-get install gcc qt4-qmake libqt4-dev
  • tar xzvf linnwt_X_Y_Z.tar.gz
  • cd linnwt_X_Y_Z
  • qmake-qt4
  • make
  • If you want to make it available system wide: sudo cp linnwt /usr/local/bin/linnwt
  • sudo linnwt app_en.qm

To use the software, I configure Settings->Options->StartFrequency=80000000, StopFrequency=100000000, DDS clock=400000000, Interface=/dev/ttyUSB0 on linux or COMx on windows, max.Sweep=200000000, frequency multiply=10.  Then in the Sweepmode tab, to monitor the ISM band, configure StartFreq 902000000, StopFreq=928000000, Samples=1000 and press Continuous to sweep continuously; press Stop to stop sweeping.  This results in 26kHz steps.

I also bought the BG7TBL “tracking” (i.e. broadband) noise source in the hope of being able to do some basic antenna return loss/swr measurements; it does generate broadband noise at around -40dBm, but so far I’ve had no luck using it with the “simple spectrum analyzer” and a return loss bridge to sweep an antenna.
noise_source

Links:
https://www.facebook.com/media/set/?set=oa.809669625718111&type=1
http://ea4eoz.blogspot.com/2014/07/modifying-bg7tbl-noise-source.html
http://ea4eoz.blogspot.com/2014/07/installing-bg7tbl-noise-source-as-poors.html
http://www.mikrocontroller.net/topic/336482 (English Translation)
http://cas.web.cern.ch/cas/Germany2009/Lectures/PDF-Web/Caspers.pdf
http://bg7tbl.taobao.com/  (English Translation)
https://vma-satellite.blogspot.com/2019/04/new-simple-spectrum-analyzer-device.html (newer D6 version)
https://www.rudiswiki.de/wiki9/SpectrumAnalyzer_LTDZ#Links (newer LTDZ version)
http://alloza.eu/david/WordPress3/?page_id=478 (SNASharp software)

Baofeng UV-B5

I’m old enough to remember when everyone didn’t carry a powerful computer and advanced digital radio transceiver in their pockets.  Back then, long-distance wireless communications still seemed exotic and well aligned with my love of electronics, so I got an amateur radio license (N3XWK).  While I have done lots of commercial work with wireless communications, I have sadly done very little in the amateur space.

In the hope of changing that, I recently bought a Baofeng UV-B5 dual-band (2m/440cm) HT (handheld transceiver):

Baofeng UV-B5

Baofeng UV-B5

It is a Chinese brand that has received a lot of attention and generally good reviews and I can see why.  The transceiver is as well built as any Icom or Yaesu I’ve had and costs $30-$35.  It feels rugged and good in your hand and has every feature you could want (offsets, CTCSS, DTMF, 5kHz steps, narrow/wide band channels, 99 named memories, LiIon battery and charging base, etc.).  It is an incredible value, highly recommended.

Software

I find cross-platform and (mostly) open-source software meets nearly all of my needs these days.  On a new computer I install at least:

For cross-platform embedded development I use gcc + NetBeans.  On Windows I really like Em::Blocks.

Chromebook

Update August 2015: I still love the C720.  I’ve replaced the SSD with a larger one (not really necessary, but nice) and installed Ubuntu 14.04 LTS on it (from here).  Ubuntu absolutely flies on it and the distro includes all of the drivers so it installed and ran without a hitch.  The portability and price of this machine simply can’t be beat and it’s fast too!

————————————————

After years of disparaging them, curiosity (and ever declining prices) got the better of me and I bought a Chromebook: an Acer C720 for $130.  I bought it because I missed having a netbook: a small computing platform that can run all day on batteries and is cheap enough that I don’t have to worry about it getting lost or broken.

The C720 is actually a pretty nice looking piece of kit:

It has a crisp 11.6″ 1366×768 screen with a speedy 1.4GHz Haswell dual-core processor and a battery rated for 8hr operation.  It is incredibly thin (0.75″) and light (2.76 lbs) and has the minimal set of important features (USB 2.0, 3.0, WiFi a,b,g, speakers, camera, etc.)  The primary limitations are: 2GB DDR3 RAM, 16GB SSD, and ChromeOS.  The keyboard isn’t ideal, but it’s usable.

It only took an hour to confirm that I had no interest in ChromeOS; it requires living online within the Googlesphere and if I were a corporate fanboy, I’d be using an Airbook.  Fortunately, it’s pretty easy to install Ubuntu (Chrubuntu or Bodhi) as a dual-boot or replacement OS.  So far, I’ve partitioned 9GB of the SSD and installed Chrubuntu and it works nicely [see update below; I replaced the OS with Bodhi].  I had to follow these instructions to fix some things in Chrubuntu like resume and a long delay at boot up.

Now I’ve got a snappy netbook with ubuntu and most common apps like Firefox, Thunderbird, LibreOffice, gcc.  I added Java, NetBeans, and other development tools.  The main limitation is RAM and disk space…so far I haven’t been able to do PrimeFaces development on it for lack of RAM.  RAM is not upgradable.  The SSD is upgradable, but it would defeat the ultra-low-cost goal to spend money on it.

Update 8/30/2014: I removed ChromeOS and Chrubuntu and installed Bodhi as the only OS on the C720 and the results are very nice.  Bodhi is an interesting distro; it is a very lightweight minimal ubuntu-based system with enlightenment.  The disk and RAM footprint is minimal.  I then installed only the apps I wanted (firefox, thunderbird, libreoffice, skype, netbeans, gcc, etc.).  It is ideal for this space-limited netbook; after all apps were installed, I still had 2/3 of the drive empty and 3/4 of the RAM free.  The system is *very* snappy running bodhi.  The only issue was lxdm which has problems with ecryptfs (you *must* encrypt at least your home directory on a portable machine right?) so I replaced it with lightdm.  I like the Bodhi shelf/gadget system and the iBar gadget which is like Cairo/Apple app dock.

Update 7/26/2015: I still really like the C720.  The screen is too small for extended work, but for many purposes it has the right combination of size/weight/battery life/power – you can take it with you to appointments (car/doctor/kids’ practices, etc.), and it is small, fits comfortably on your lap, and doesn’t need a charger.  The main limitations are the 2GB of RAM (I wish I had bought the 4GB version) and the 16GB internal SSD.  The RAM can’t be upgraded (BGA components), but the internal SSD is socketed and easily removed so I replaced it with a 128GB SSD (probably overkill).  With more storage space, I decided to upgrade to a newer linux OS.  Bodhi 3.0 would not install in 2GB of RAM and with the larger drive, it wasn’t clear that Bodhi offered much so I installed Ubuntu 14.04 LTS which, from first use, seems to be great.  Some things to note about the upgrade process:

  • I didn’t want to put the dozen+ screws back in after replacing the SSD in case there was something wrong; so I just put the bottom on loosely and tried booting and it would not boot; I quickly swapped the 16GB SSD back in and it didn’t work either!  I thought I’d bricked the c720 and I spent a lot of time on this, but it turns out that for the unit to boot you need at least the battery screw installed (screw #6 here: http://www.chromium.org/_/rsrc/1381990807648/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook/c720-chromebook-annotated-innards.png)
  • I installed ChromeOS on the new SSD (and later on the old 16GB SSD to wipe it): I used the Chromebook Recovery Utility to create a recovery USB flash drive which worked pretty well see here and here for more instructions.  You can create recovery flash drives using Windows or Linux.  Linux was very smooth; if you use Windows, be aware that you need to delete the partitions on the flash drive before installing the recovery image or the process gets stuck at 0% writing.  The Recovery Utility provides a mechanism for deleting old partitions.
  • After installing Ubuntu, wifi wasn’t working properly until I found this link that suggested adding a wifi configuration file (/etc/modprobe.d/ath9k.conf) with a single line of configuration:
    sudo nano /etc/modprobe.d/ath9k.conf
    Then add:
       options ath9k nohwcrypt=1 blink=1 btcoex_enable=1 enable_diversity=1

So I finally have a current Ubuntu with long-term support installed and it works beautifully; it is fast, the trackpad, camera, speakers, microphone, wifi, etc. all work well, and with the larger SSD I have plenty of space.

Pogoplug

I just bought a pogoplug (mobile) for $7.35 shipped:

  • 800MHz ARMv5 processor
  • 128MB of RAM
  • 128MB of NAND flash
  • USB 2.0 port
  • GbE port
  • External 12v power adapter.
  • Ethernet cable
  • Tiny and sharp looking

What makes this interesting is that you can easily replace the built in software with ArchLinux for ARM using an external USB flash or hard disk drive.  With that, it becomes a full fledged linux server (albeit with less RAM than I’d like) that only consumes around 5W.  I installed ArchLinux 3.15 on it using an ancient 4GB USB flash drive I had lying around and I really like the result.  With the following installed, it still has 2.2GB free on the flash drive and 80MB RAM free:

  • Apache
  • PHP5
  • Samba
  • MariaDB (MySQL)
  • Webmin
  • gcc, perl, python
  • SSH, NTP, Lynx, Vi, etc.

It boots very fast (much faster than my main server); despite having a relatively wimpy processor and drive, it feels snappy and responsive.

It’s hard to argue with the price, particularly since this makes quite a viable server for many things (mail, web, wordpress?, file storage?)

If I setup another, I’ll probably get the E02 Pogoplug which has 256MB RAM, 4x USB ports, and a 1.2GHz processor or maybe the series 4 that has a USB 3.0 port.

UPDATE: July 27, 2014

I liked the first pogoplug so much I bought another; this one is the slightly older E02 version and cost nearly $20 shipped but has better specs:

  • 1200MHz ARMv5 processor
  • 256MB of RAM
  • 128MB of NAND flash
  • 4x USB 2.0 port
  • GbE port
  • Built-in power supply and cable management
  • Note quite as tiny but still sharp looking

pogoplug_e02

Like the newer model, installing ArchLinux was a piece of cake requiring only a USB flash drive (I used a Kingston 32GB flash drive that cost $12) and following simple instructions.  After updating the install, I added a few packages to make it usable as a generic LAMP server including: apache, base-devel, hdparm, lynx, mariadb, php, samba, sudo, and webmin.  With everything configured and running:

  • 2.75GB of flash storage was used (leaving 26.5GB free)
  • 60.8MB of RAM was used (leaving 190MB free after buffers/caches)

I love a 4W completely silent $32 server.

Pogoplug Optimization

Obihai OBI202 VOIP

I bought an Obihai OBI202 VOIP box in November 2013 for my home office; these are $70 from Amazon and elsewhere and often on sale for less (I paid $52.24 shipped).

Obihai OBI202 VoIP Phone Adapter with Router - SIP, T.38 Fax Support

The Obi202 is another great VOIP box, even better than Ooma IMHO, but for more technical users.  For the first year, it provided an absolutely free phone line via Google Voice.  This year (May 2014), Google dropped its support for free outgoing calls, so I signed up for a year of service for $60 with PhonePower.  So far the service has been perfect.

The Obi202 features include:

  • Supports 2 lines
  • Supports multiple VOIP providers (unlike the Ooma Telo which only works with the Ooma service, the Obi202 is not locked to a particular provider and you can configure the box with up to 4 different VOIP providers)
  • Crystal clear phone calls

dd-wrt

dd-wrt is open-source linux-based firmware that can replace the stock firmware on many wireless routers and it is awesome.

I use dd-wrt with my dirt cheap ($22) Rosewill RNX-N300RT router and it takes a low-end router and makes it a powerful tool for managing my network.  Some of the key things I like about it include:

  • Separate WiFi guest network that is fully isolated from my home wired and wireless networks
  • Fine control over hours of usage by Wired and Wireless clients (helps limit kids’ access to reasonable hours)
  • Superb web-interface for diagnostics and administration
  • Excellent firewall

dd-wrt maintains a database of routers they support; if you are technically inclined and your router supports it, I highly recommend trying dd-wrt; note that you almost certainly void your router warranty by replacing its firmware.