Building a WiFi based Room Monitor using an ESP8266 and an Arduino compatible

BeautifulPhoto635888272313367045Having purchased a few of the ESP8266 WiFi modules, I decided to devote one of them to a room monitoring device.  I live i a fairly good sized home, with an oversized garage. The room over the garage is a bedroom.  Well, the room, while nicely insulated, is huge and is difficult to maintain the same temperature as the rest of the upstairs.  And, since it is a bedroom where a child who has a problem maintaining his body temperature sleeps and plays, we need to keep an eye on the temp in that room.

I did have an Arduino UNO with the ethernet shield and a DHT11 sensor in the room, but the ethernet sheild did not work well with the WiFi extender I have in the room.  And, wanting to actually build something specifically for the purpose at hand, I decided to design and build a solution around the wifi module.

It needed to be simple and, preferably, run off of a battery.  While I have not yet gotten to WP_20160106_15_27_46_Pro_LIthe battery solution yet, I do have the rest built and am working on the code.

The whole thing fits on a 2.5 by 2inch perf board. It features an Atmega 328 chip, a Nokia 5110 LCD, DHT11 temp/humidity module, the aforementioned ESP8266 module, LED’s, a few caps and resistors and a 16mhz crystal.

WP_20160112_22_25_33_Pro_LIAssembly was easy.  Remembering the cathode on an LED…that’s hard, for me.  I always hated those damn things.  I love blinky lights, but can’t stand to wire up the things.  UGH.  Anyway, I’m only using a few of the I/O pins on the 328: Serial in and out, D2, A4, A5 and, for the LCD, D3 through D7.  This leaves a few pins for you to use if you wish to expand the capabilities of the device.

I started out by soldering the socket for the chip.  Then, I wired up the reset, which is pin 1 to a WP_20160119_22_28_27_Pro_LImomentary push button connected to ground.  I then wired up pin 13 to an LED via a 150 ohm resistor, connected to ground. Power (pin 7) and  ground (pin 8) were next.  You can test, at this point, by inserting a 328 that has the standard Arduino bootloader and nothing else burned into the chip. Insert the chip, apply five volts and the LED should blink.  If so, congrats!

You can install a power on LED as well.  Solder an LED and 150 ohm resistor to ground and Pin 7. When power is applied, the LED should light up.

The crystal was next.  Solder the crystal to pins 9 and 10.  Solder a 22pF capacitor to each each pin of the crystal and tie them to ground.

If you are at this point, congratulations, you have built a very basic Arduino compatible microcontroller. 

WP_20160115_18_50_02_Pro_LIFrom this point, I soldered some headers so I could connect serial I/O, power and the connections for the DHT11 and RTC (1307).   I then soldered the Nokia 5110 to the board and connected it as follows:

pin 7 – Serial clock out (SCLK)
pin 6 – Serial data out (DIN)
pin 5 – Data/Command select (D/C)
pin 4 – LCD chip select (CS)
pin 3 – LCD reset (RST)

Connect pin 6 on the LCD to +5, pin 8 to Ground and pin 7 to +5 if you want the back light. I connected a switch to my display so I could turn the light on or off.  Add the swtich between the +5 and pin 7 if you wish.

I uploaded a demo 5110 sketch to make sure the screen worked. It did.

The DHT only has one data pin, the middle pin, and it goes to D2 on the chip.  Connect the others to +5 and ground.

WP_20160118_00_04_44_Pro_LI (2)As the ESP8266 is intolerant of higher voltages, I installed a 3.3v regulator to power the module.  I grab a five volt line, solder it to the right pin of the to220 regulator, the left most pin to ground and the middle pin to the VCC pin on the 8266.  The TX line from the 8266 goes to D0 on the 328, the RX line to D1 and, ground to ground. You also, if you have the v1 of the module, connect power to the chip select pin (4) of the 8266 as well as connect its RST pin to the reset pin of the 328. 

The RTC (real time clock) is connected:
SCL to A5 on 328
SDA to A4 on 328
VCC to +5
GND to ground

Connect it all up and you have a complete wifi based room monitor. For now, it returns the temperature and humidity.  At somepoint, I am going to return a timestamp so I graph the data and figure out when the temperature spikes or cools. 

Software

WP_20160122_13_12_55_Pro_LIGetting the LCD to display the date, time, temperature and humidity was simple.  The issue I have is with the wifi module. And it is also keeping me from posting a complete solution. So, I am going to post what I have. If one of you can figure out the webserver piece, please share it with us. I am sure it is something I am doing wrong. 

The code is at the end of this post.

Building things from ‘scratch’ is far more rewarding than just connecting a few sensors to an UNO or some other board.  But, you can do that if you wish.  At any rate, no matter what you do, YOU are still doing it and that is what matters. 

Code:

/*********************************************************************
* This sketch uses the Adafruit libraries for Monochrome Nokia 5110 LCD Displays
*
* Pick one up today in the adafruit shop!
* ——> http://www.adafruit.com/products/338
*
* These displays use SPI to communicate, 4 or 5 pins are required to
* interface
*
* Adafruit invests time and resources providing this open source code,
* please support Adafruit and open-source hardware by purchasing
* products from Adafruit!
*
* Written by Limor Fried/Ladyada  for Adafruit Industries.
* BSD license, check license.txt for more information
* All text above, and the splash screen must be included in any redistribution
*********************************************************************/

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include “DHT.h”
#include <Wire.h>
#include “RTClib.h”

#define BUFFER_SIZE 128
char buffer[BUFFER_SIZE];

DHT dht;
RTC_DS1307 rtc;

// pin 7 – Serial clock out (SCLK)
// pin 6 – Serial data out (DIN)
// pin 5 – Data/Command select (D/C)
// pin 4 – LCD chip select (CS)
// pin 3 – LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

// Workaround for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34734
#ifdef PROGMEM
#undef PROGMEM
#define PROGMEM __attribute__((section(“.progmem.vars”)))
#endif
const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000001, B10000000,
  B00000011, B11000000,
  B00000111, B11100000,
  B00001111, B11110000,
  B00000000, B00000000,
  B00000000, B00000000,
  B00000000, B00000000,
  B00000000, B00000000,
  B00000000, B00000000,
  B00000000, B00000000,
  B00000000, B00000000,
  B00000000, B00000000,
  B00000000, B00000000,
  B00000000, B00000000,
  B00000000, B00000000,
  B00000000, B00000000
};
#define SCREENWIDTH 84
#define SCREENHEIGHT 48

#define DEBUG true
const int ESP8266_CHPD = 4;
int isConnected = false;

void setup() {

  display.begin();
  Wire.begin();
  rtc.begin();
  //rtc.adjust(DateTime(__DATE__, __TIME__));
  if (! rtc.isrunning()) {
    display.println(“RTC is NOT running!”);
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(__DATE__, __TIME__));
  }
  Serial.begin(115200); // your esp’s baud rate might be different
  Serial.setTimeout(5000);
  Serial.println(“AT+RST”);

  if (Serial.find(“ready”))
  {
    display.println(“Module is ready”);
    isConnected = true;
    display.drawBitmap(0, 0, logo16_glcd_bmp, 16, 16, BLACK);
    display.display();
  }
  else
  {
    display.println(“Module have no response.”);
    display.display();
    setup();
  }
  Serial.print(“AT+CWMODE=1\r\n”);
  Serial.print(“AT+CWJAP=\”xxx\”,\”xxx\”\r\n”);  //replace xxx with your ssid and password
  Serial.print(“AT+CIFSR\r\n”);
  Serial.print(“AT+CIPMUX=1\r\n”);
  Serial.print(“AT+CIPSERVER=1,80\r\n”);
  display.println(Serial.read());
  display.setContrast(50);
  dht.setup(2); // data pin 2
  display.display(); // show splashscreen
  delay(2000);
  display.clearDisplay();   // clears the screen and buffer
  display.display();
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.println(“HalfByte Room    Monitor”);

  display.display();
  delay(3000);
  display.clearDisplay();
  display.setTextSize(1);
}

void loop() {
  int ch_id, packet_len;
  char *pb;
  Serial.readBytesUntil(‘\n’, buffer, BUFFER_SIZE);

  delay(dht.getMinimumSamplingPeriod());

  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();

  display.clearDisplay();
  display.display();
  if (isConnected == true) {
    display.drawBitmap(70, 0, logo16_glcd_bmp, 16, 16, BLACK);
    display.display();
  }
  display.setCursor(3, 29);
  display.print(“Humidity: “);
  display.setCursor(display.width() / 2, 38);
  display.print(humidity, 1);
  display.print(“%”);
  display.setCursor(3, 20);
  display.print(“Temp: “);
  display.setCursor(40, 20);
  display.print(dht.toFahrenheit(temperature), 1);
  display.print(“F”);
  display.drawRect(0, 28, display.width(), 19, BLACK);
  display.display();

  DateTime now = rtc.now();
  display.setCursor((display.width() / 2) – 35, 1);
  if (now.month() < 10) display.print(0);
  display.print(now.month(), DEC);
  display.print(‘/’);
  if (now.day() < 10) display.print(0);
  display.print(now.day(), DEC);
  display.print(‘/’);
  display.print(now.year(), DEC);
  display.setCursor((display.width() / 2) – 30, 12);
  if (now.hour() < 10) display.print(0);
  display.print(now.hour(), DEC);
  display.print(‘:’);
  if (now.minute() < 10) display.print(0);
  display.print(now.minute(), DEC);
  display.print(‘:’);
  if (now.second() < 10) display.print(0);
  display.print(now.second(), DEC);
  display.display();

  if (strncmp(buffer, “+IPD,”, 5) == 0) {
    // request: +IPD,ch,len:data
    sscanf(buffer + 5, “%d,%d”, &ch_id, &packet_len);
    if (packet_len > 0) {
      // read serial until packet_len character received
      // start from :
      pb = buffer + 5;
      while (*pb != ‘:’) pb++;
      pb++;
      if (strncmp(pb, “GET / “, 6) == 0)
        //if (Serial.available()) // check if the esp is sending a message
        //{
        if (Serial.find(“+IPD,”))
        {
          //delay(1000);
          delay(100);
          clearSerialBuffer();
          int connectionId = Serial.read() – 48; // subtract 48 because the read() function returns
          display.print(connectionId);
          display.display();
          // the ASCII decimal value and 0 (the first decimal number) starts at 48
          homepage(connectionId);
        }
    }
  }
}

void homepage(int ch_id) {
  String Header;
  float temperature = dht.getTemperature();
  Header =  “HTTP/1.1 200 OK\r\n”;
  Header += “Content-Type: text/html\r\n”;
  Header += “Connection: close\r\n”;
  Header += “Refresh: 5\r\n”;

  String Content;
  Content = “Environmental Status:<br/>”;
  Content += String(“<B>Temperature:</b>”);
  Content += String(dht.toFahrenheit(temperature));
  Content += String(“<br><b>Humidity: </b>”);
  Content += String(dht.getHumidity());
  Header += “Content-Length: “;
  Header += (int)(Content.length());
  Header += “\r\n\r\n”;

  Serial.print(“AT+CIPSEND=”);
  Serial.print(ch_id);
  Serial.print(“,”);
  Serial.println(Header.length() + Content.length());
  delay(10);

  //if (Serial.find(“>”))
  {
    Serial.print(Header);
    Serial.print(Content);
    Serial.println(“AT+CIPCLOSE=0”);

    delay(10);
  }
}

// Get the data from the WiFi module and send it to the debug serial port
String GetResponse(String AT_Command, int wait) {
  String tmpData;

  Serial.println(AT_Command);
  delay(10);
  while (Serial.available() > 0 )  {
    char c = Serial.read();
    tmpData += c;

    if ( tmpData.indexOf(AT_Command) > -1 )
      tmpData = “”;
    else
      tmpData.trim();

  }
  return tmpData;
}

void clearSerialBuffer(void) {
  while ( Serial.available() > 0 ) {
    Serial.read();
  }
}

void clearBuffer(void) {
  for (int i = 0; i < BUFFER_SIZE; i++ ) {
    buffer[i] = 0;
  }
}

boolean connectWiFi(String NetworkSSID, String NetworkPASS) {
  String cmd = “AT+CWJAP=\””;
  cmd += NetworkSSID;
  cmd += “\”,\””;
  cmd += NetworkPASS;
  cmd += “\””;

  GetResponse(cmd, 10);
}

Advertisements

The ESP8266 WiFi Module–how to get it to work with an Arduino

WP_20160106_15_27_46_Pro_LIFinally got around to playing with the ESP8266 WiFi Module with an Arduino UNO.  I am using the UNO simply because it has a steady, 3.3v output while the HalfByte Console isn’t as steady and the module is, from everything I have read, is not tolerant of much more than the 3.3 volts.  Until I fix the console’s 3.3volt output, I will use the UNO.

Before I go on, I have to say, this little board isn’t very reliable. It is only connecting about a third of the time.

The documentation is spotty, even though it has been out for quite sometime now.  So, I hope to help anyone who just wants to use it as a WiFi module and not reprogram it to play Tic Tac Toe.

First, it is important to know which module you have as there are quite a few variations.  You go here to figure that out. The board I have is an ESP-01 Rev 2.  The Rev is important as you have a couple of extra steps from the rev 1 board.

From the wiki, here’s the pin out for the rev 2 board:

image

In order for this thing to work, you MUST jumper the CHIP_EN (or CHIP_PD) pin to the VCC pin, pulling the pin high.  This enables the whole thing to, you know, work. 

One other important detail…the baud rate is 115,200.  Most documentation I read said it was 9600, but, at least on mine, it is 115,200 baud.

Those two things were the key for me to get my module to connect and work.

Wiring it up is easy:image

ESP8266 ARDUINO
UTX RX (pin 0)
URX TX (pin 1)
GND GND
VCC 3.3V
CHIP_EN 3.3V
RST Reset

The code is straightforward enough. I copied an example from the wiki and modified it to work with my module and took out some extraneous junk.WP_20160106_15_59_14_Pro_LI (2)

Code:

#include <SoftwareSerial.h>
#define SSID        “xxx”
#define PASS        “xxx”
#define DST_IP      “173.194.116.116”    //google.com
SoftwareSerial dbgSerial(10, 11); // RX, TX
void setup() 
{
    // Open serial communications and wait for port to open:
    Serial.begin(115200);
    Serial.setTimeout(5000);
    dbgSerial.begin(9600);  //can’t be faster than 19200 for softserial
    dbgSerial.println(“ESP8266 Demo”);
    //test if the module is ready
    Serial.println(“AT+RST”);
    delay(1000);
    if(Serial.find(“ready”))
    {
        dbgSerial.println(“Module is ready”);
     }
    else
    {
        dbgSerial.println(“Module have no response.”);
        while(1);
     }
    delay(1000);
    //connect to the wifi
    boolean connected=false;
    for(int i=0;i<5;i++)
    {
    if(connectWiFi())
      {
      connected = true;
      break;
      }
    }
    if (!connected){while(1);}
      delay(5000);
      //set the single connection mode
      Serial.println(“AT+CIPMUX=0”);
}
void loop()
{
  String cmd = “AT+CIPSTART=\”TCP\”,\””;
  cmd += DST_IP;
  cmd += “\”,80″;
  Serial.println(cmd);
  dbgSerial.println(cmd);
  if(Serial.find(“Error”)) return;
  cmd = “GET / HTTP/1.0\r\n\r\n”;
  Serial.print(“AT+CIPSEND=”);
  Serial.println(cmd.length());
  if(Serial.find(“>”))
  {
    dbgSerial.print(“>”);
  }else
  {
    Serial.println(“AT+CIPCLOSE”);
    dbgSerial.println(“connect timeout”);
    delay(1000);
    return;
  }
  Serial.print(cmd);
  delay(2000);
  //Serial.find(“+IPD”);
  while (Serial.available())
  {
  char c = Serial.read();
  dbgSerial.write(c);
  if(c==’\r’) dbgSerial.print(‘\n’);
  }
  dbgSerial.println(“====”);
  delay(1000);
}
boolean connectWiFi()
{
  Serial.println(“AT+CWMODE=1”);
  String cmd=”AT+CWJAP=\””;
  cmd+=SSID;
  cmd+=”\”,\””;
  cmd+=PASS;
  cmd+=”\””;
  dbgSerial.println(cmd);
  Serial.println(cmd);
  delay(2000);
  if(Serial.find(“OK”))
  {
    dbgSerial.println(“OK, Connected to WiFi.”);
    return true;
  }else
  {
    dbgSerial.println(“Can not connect to the WiFi.”);
    return false;
  }
}

Because I am using the serial I/O on the UNO for the module, I used softwareserial to talk to a HalfByte Console running the HalfByte graphical terminal sketch so I could see the output of the module.  Normally, you would, likely, not have any kind of output on the Arduino as you’d be using the WiFi module for your I/O. I’m guessing.

I may order a few more of these things to play with reprogramming them and running code directly on them.  There is a Basic Language interpreter, LUA and Javascript for them, so I may play with that.  For now, IF I can get it working reliably, I may pair one with an ATTINY85, like a Trinket or DigiSpark, and a DHT11 temp sensor and set up a network of wireless thermometers in the house. 

I can see the potential, but the reliability is an issue.

Windows 8.1 Preview: First Impressions and issues

Screenshot (6)I’ve spent the last couple of days using Windows 8.1 on my Asus VivoTab Smart Tablet. Overall, I am happy with the updated operating system. Many small changes equal one huge improvement over the previous release of Windows. Things seem to be a bit more fluid, some things seem more responsive while others, well, not so much.

First, the install process.

For me, the install went wrong from the moment it finished downloading. I noticed the battery was below 20%, so I plugged the tablet into the power supply.  Little did I realize that this particular tablet seems to run off of the battery, no matter what. It knows it is plugged in, but still runs from the battery.  I don’t think this is a Windows issue, more a design flaw from Asus.  Because the battery died, and the install had gotten to the setup stage, when the battery had charged to 15% or so, it powered up and rolled back the installation. While the tablet did not get bricked, I had to go through the install process all over again.  While I am not sure why, the install took well over three hours to complete. Since I was not at my home, I was using my portable Sprint hotspot. I am guessing that factored in.

Screenshot (8)Once the install was complete, I noticed the whole experience was, well, wonky.  The scrolling was jaggy, apps didn’t draw fast, some were not rendering correctly and, over all, video performance was just awful. A quick check of the video driver revealed that it was no longer using the Intel graphics driver, but something called ‘Microsoft Basic Video Driver.’ Re-installing the correct video driver fixed the issue.

Once the experience was smooth again, I was able to peruse the new environment and, get a bit confused all over again.

Screenshot (7)The first thing I wanted to check out was the returned Start button and all of the options it had. Well, funny thing, the damned options are in the oddest of places…compared to the RT side of the house. To get them, go to the antique Windows Desktop and then tap and hold the button for a second and then let go. A list of options will pop up. Among the options listed are control panel choices, call task manager, Run, Search, File Explorer and, best of all, an option to shut down the computer.  To access the button’s settings, tap and hold the taskbar for a second. The context menu will display. Tap the Properties then the Navigation tab.  There, you can the options for the Start button and the four corners of the screen.  What a bizarre and unintuitive place to put these settings. But, they are there…including the option to boot to desktop.

Oh, you can also set your desktop wallpaper to show on the Start Page. 

Screenshot (11)There are many, many small changes that, added up, make Win 8.1 feel new, like Windows 7 did over Vista.  Some of the smaller changes, like moving the tabs in ‘metro’ IE from the top to the bottom of the screen, seem like they were always there. It took me READING about the change to actually realize that, yeah, that was new.  Other changes are noticeable and make a lot of sense, like the settings page. There are a bunch of former Control Panel settings that are now in the metro style.  It makes the operating system look and feel a lot more cohesive. Microsoft still has a ways to go, but they are awfully close here.

The packaged apps-like News, Weather, Sports and others have received updates and there are a few new ones as well. I especially like the Bing recipes application.Screenshot (19)

There are improvements in the onscreen keyboard, like the word suggestions, that make the onscreen keyboard one of the best touch screen keyboards I have ever used, far and away better than iPad’s.

Now, all is not smooth in Asus land and Windows 8.1. Aside from the battery issue, I’ve run into a slew of problems since the upgrade. It’s like the drivers are incomplete, resulting in things not working quite right or at all.

The camera app is supposed to have Photosynth allowing you to create a virtual 3D rendering of your photo. You take a series of photos, guided by an onscreen arrow, of your target (a room, area, etc.) and Photosynth stitches it together allowing you to explore the photo. Well, the option is totally missing on my Asus VivoTab Smart. I’m guessing Windows is using a generic camera driver that is not fully compatible. Whatever the reason, the button is missing for this feature.

The battery indicator is missing from the sign in page, the status window and the task bar.

The Windows Store won’t always download applications and, in the case of the new Alarms application, it says I have it, yet I uninstalled it since it was not completely installed. Now, the store says it is installed.

The onscreen keyboard does not always display when I login to the computer. I have to shut down and restart.

The photo editing feature in the Photos app does not properly render the photo when you try to edit it.

Wi-Fi dropped out occasionally. I was able to correct the Wi-Fi issue by reinstalling the driver package from Asus.

Issues aside, this is worthwhile upgrade, even in the beta state that it is clearly in.  I am sure the little bugaboos listed above will get fixed before the final release. Even so, If you want to play around with the new OS, download and install on a machine that you can afford to sacrifice because when the final release is out, it will install like a new install and NOT migrate your applications. 

Stay tuned for more. I am still evaluating, but, so far, it is looking really nice.

Ocean city, we came, we conquered, we left

100_2572Vacations.  We love them. They are a time to spend with your family and/or friends. They are a break from our normal lives. A time to rest and relax. Only…we don’t rest and, if you have kids, you do little relaxing.

We tend to travel, sometimes by plane or train, but, for many families, we drive to our destinations-destinations that are usually a day or two away.

I just got back from vacationing, with my family, in Ocean City, Maryland. Now, if you’ve never heard of this quaint little beach city, I would not be surprised. It is nestled on the east side of Maryland, bordering the Atlantic Ocean. During the summer, the temps are very warm, typical for the area. The city is small, very clean and the people are very friendly. If you know what Myrtle Beach, South Carolina is like, take the very best of that and that’s what ALL of Ocean City is like.100_2615

We stayed at a family resort called Francis Scott Key Family Resort. It is a multi building facility, with its own mini-golf course, an outdoor and indoor pool (which is part of the ‘water park’), basketball court, volleyball court, picnic pavilion, fishing pond and an outdoor ‘water park’ for kids. The rooms range from small to smaller, and there are bungalows with two bedrooms for rent. There is a family area, movie room and a 50’s style diner. It is an inexpensive resort and was pleasant, but nothing fancy. It is like an Econolodge version of the Great Wolf resort. The resort was about two miles from the beach, and fairly convenient to most of what Ocean City has to offer.

Our stay was for five days, which might have been one day too long or two days too short, depending on how you look at it. It was a bit long because eating out in this city is damned expensive.  While our room had a stove, microwave and fridge, we only actually used it for two meals.  And that was only when we realized how much of our vacation budget had been spent on food.  And, it was not all good food either, or a good experience worth the price that was charged.

IMAG1126Take, for instance, that 50’s style diner at the resort.  The first visit was almost two hours long. See, we decided to take our vacation the last of summer break for our kids. The time just happens to coincide with other localities ALREADY having started the new school year and many colleges ramping up a new year as well. As a result, much of the staff of the diner had already left for school, so the resort was using its staff. Unfortunately for us, they did not seem to know what to do. We were seated on the far side of the diner, which seemed to be ignored by the wait staff.  When we finally did get our order, it was, naturally, not all correct. I ended up with two cups of coffee, which I really did not mind, but the same guy asked, twice, if I wanted coffee, after I ordered it. Once the order was straight, we were told that we would get a 20% discount on our meal. The food was great, and we did, in fact, get our discount. A return visit was much more pleasant, they hired a few temps to help out and it was a nice visit. Other restaurants had great service and mediocre to OK food. Oddly, one of the better meals we had was a chain restaurant (we try to avoid them as we can get them at home.)

My 15 year old son, an amusement park junkie, wanted to visit the local attractions.IMAG1083 So, I took him and his cousin to a place called Trimper’s Amusements. Now, we’ve been there before and on each prior visit, we were able to purchase ‘all ride wrist bands.’ That’s a paper bracelet that allows you to partake in the parks’ attractions. It sells for about $22.  But…we got there after 7PM, when they STOP selling the bloody things. It seems the park is busiest after 7, so they sell sheets of tickets. A sheet of 40 tickets is $19.95.  Each ride takes 5 to 8 tickets. Of course, most of the rides the boys wanted to ride took 8 tickets. So, now they have to actually plan out what rides they wanted. Through judicious selection, they rode/did 6 things.  The only saving grace was that the place is on the boardwalk, which is just spectacular at night.  While the boys had a good time, it is a shame that the park priced them out of a better time.

A better time was had at the Jolly Roger Amusements.  Jolly Roger DOES have an evening all ride pass, but it is two dollars more than the day time pass. I’m guessing the parks do this since most people are actually on the beach and not at amusement parks.  At any rate, our four year old was able to enjoy Jolly Roger as well and it made for the best night of our vacation.

Along with the mini-golf, amusement parks, eating and beach going come the inevitable family squabbles.  No one wanting to decide what to eat seemed to be the biggest issue, dealing with an overly stimulated child and another who seemed comatose at times and one who is becoming a teen all added up normal family tension. It was all easily subdued by either leaving the room or, yes, eating.  Food seems to be the quiet arbiter of all family problems.  Fortunately, those little moments were not long lasting and did not spoil our stay.

100_2648Then, there is the drive. The long dreaded drive home. While the mapquest directions say four hours and 45 minutes or so, it really took over six. My wife is pregnant, the four year old has a pea sized bladder, I’m not as young as I used to be and the two older boys need for food plus traffic in Virginia’s port city of Norfolk all added up to frequent stops and a 45 minute traffic delay. Plus, the trip over and through the Chesapeake Bay Bridge Tunnel was not fun for me as I seriously dislike tunnels and long bridges. And, boy, is that a long bridge. Let me tell you, I was gripping that damn steering wheel so hard, my joints really ached by the time we got off the damned thing.

So, it was really great to get home. Unpacking was easy, all of our clothes went into the washing machine and since we did not shop, we didn’t have much to unpack. I downloaded all of the video and photos to the computer and started working on that great vacation video. It’s still ‘in process’, by the way. Didn’t do much with the photos as I had already started uploading them during vacation, to Facebook. Oh yeah, the WiFi at Francis Scott Key was terrible. While we could connect, we could not actually do anything. I took my Sprint WiFi hotspot piece of junk and we were able to use that. One weeks worth of data usage came to about 985 megabytes. Not bad for three devices being used.

While it may seem, just from reading the above, that we did not enjoy our vacation.  Yes, there were issues-as there will be for pretty much every vacation for everyone, do not go perfect all of the time-but we had a blast.  The resort was entertaining and we did not have to go far for anything. The family squabbles, short as they were, are just part of life and I would not trade them or this vacation for anything.

Wifi issues? try an extender (and don’t forget the gas!)

Last year, we purchased a new home that is nearly twice as big as the house we had.  As with any move, you tend to either overlook something or just not think of everything, like the house using natural gas for heat. Imagine my surprise when I went to shower and had no hot water.  I felt pretty lame since I knew the house had gas logs in the fire place.  It was April of 2011 and the weather was starting to warm up, so I just didn’t think about the gas.  It took five days to get the gas flowing, but we could finally enjoy a hot shower or bath (that tub in the master bedroom is amazing!) One thing that was not flowing very well, however, was the WiFi.

At the old house, which was about 1400 square feet, my Belkin router worked great. Nice, fast coverage all the way out to my mail box.  Not here. No, sir.

Since we have an XBOX 360 and since it is in our ‘game room’ (really just the finished second floor of the garage, but nearly as big as the house) that’s where the cable modem and router are located. In the game room, WiFi works great.  However, go 20 feet down the hall and the signal would drop to half. Go to the opposite end of the house and the signal is nearly gone.  I have purchased two routers in the last year, hoping that would fix it. I got a Netgear ‘extended range’ router last time and that helped a little.

I even got desperate and put a router on a PC in our bedroom and tried to use it as an extender. That worked insofar as having a good WiFi signal on that side of the house, however, it was still saddled with the weak signal coming from the game room.  After a couple of months trying to get that setup to work, I just went back to the way it was and we just dealt with a slow connection in the other parts of the house.

Last week, I get a call from Comcast, my ISP/Cable provider again, and was informed that the cable modem was reporting signal issues going into the house. They setup a time and day for a tech to come out and fix. Well, true to their word, a tech did come out and worked on the line coming into the house. He found an EIGHT way splitter that he replaced with a three way splitter. That did, in fact, speed up our service.  Except for the WiFi, which was still rather slow.

Frustrated, we paid Best Buy a visit and walked away (after paying, of course) with a Netgear WiFi Range Extender (model WN3000RP.) We were told by the Best Buy guy that it was simple, just plug it in and pick your network name from the browser based interface. Really? It’s that simple? I don’t normally put a lot of stock in what I’m told by someone at Best Buy (sorry, if you work there, I mean no offense, but most of them generally do not have a broad product knowledge) but, this time, the guy was spot on.

WN3000RP from NetgearThe WN3000RP really is brain dead simple to configure.  It plugs directly into the wall, so it is also completely wireless. Once plugged in and the indicator LEDs light up, you can go to the browser on your computer and enter the address to bring up the extender’s configuration page.  It will detect all of the WiFi nets in your area. Pick the one you wish to extend and, if it is secured, you will need to enter it’s password. Once it connects, you are good to go.  No fuss.  It took all of five minutes.  Three of the five were me reading the little user guide.

So, did it help? Yes and no.  Yes, we have much better coverage throughout the enter house. Pages load faster and things like YouTube and the games on Facebook seem a lot more smooth.  However, some rooms in the house still have issues. If there is more than two walls, it seems, then the extender’s signal goes down quite a bit, depending on the device. My first gen iPad seems to be the most problematic.  Also, most of the rooms where the signal dies down are rooms we would not normally use WiFi, like the walk in closet or the attic.  But, for where we do use WiFi, the extender is working as advertised.

We can now enjoy the Annoying Orange in full, non-stop motion just like it was to be.  Life is good.