Sunday, November 20, 2016

IPv6, Arduino, and temperature

Referring to what I learned last time, I installed the SparkFun library for the HTU21D. Then I did a simple mash-up of MiniHTTPServer and SparkFun_HTU21D_Demo, and it worked on the first try. I think I spent so much time starting two years ago being frustrated with the uIP library that I guess I don't expect Arduino to be simple, or even to work. However, I can now read temperature and humidity over IPv6 for around $25 from eBay, now that I found a working IPv6 (single-stack) library in EtherSia. I'm not complaining, but it just feels anticlimactic after all those months of arguing with the first Ethernet library to have the second Ethernet library work right away with minimal effort.

Lesson (re)learned: Always use the right tool for the job.

For future reference, this sketch would not work with an Arduino with less memory than the Nano v3; it needs that 2kB of SRAM. My hardware is HTU21D for temperature and humidity, NanoShield and EtherSia for IPv6 Ethernet, and Arduino Nano v3.

My code with EtherSia_ENC28J60:
Sketch uses 12,162 bytes (39%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,263 bytes (61%) of dynamic memory, leaving 785 bytes for local variables. Maximum is 2,048 bytes.

My code, but claiming EtherSia_W5100:
Sketch uses 11,864 bytes (38%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,259 bytes (61%) of dynamic memory, leaving 789 bytes for local variables. Maximum is 2,048 bytes.

Sketch uses 5,656 bytes (18%) of program storage space. Maximum is 30,720 bytes.
Global variables use 460 bytes (22%) of dynamic memory, leaving 1,588 bytes for local variables. Maximum is 2,048 bytes.

Packet Printer (EtherSia_ENC28J60):
Sketch uses 7,406 bytes (24%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,053 bytes (51%) of dynamic memory, leaving 995 bytes for local variables. Maximum is 2,048 bytes.

Mini HTTP Server (EtherSia_W5100):
Sketch uses 8,112 bytes (26%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,025 bytes (50%) of dynamic memory, leaving 1,023 bytes for local variables. Maximum is 2,048 bytes.

Saturday, November 19, 2016

Arduino Nano with IPv6

I haven't touched my Arduino Nanos in a while because they didn't do IPv6 with the arduino_uip library I thought would work. However, I poked around again, and found EtherSia, so I thought I would give it a try. In the intervening time, I have switched from Mac to Linux for my daily driver.

I went to the Arduino Getting Started page, and downloaded the latest version of the IDE for Linux. I connected my Nano v3 that has the FTDI controller, so I selected Tools (menu) > Board > Arduino Nano and Tools > Port > /dev/ttyUSB0. The software selected Tools > Processor > ATmega328 automatically (which is correct for the Nano v3, but not what the hardware-specific page says to expect). I selected the "Blink" sketch (the hardware equivalent of "Hello, World!", from File (menu) > Examples > 01.Basics > Blink), clicked on Verify, clicked on Upload, and my Arduino Nano is blinking at me.

The relevant output line from lsusb for me was:

Bus 003 Device 047: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

When I run Tools > Get Board Info, I get
BN: Unknown board
VID: 0403
PID: 6001
SN: Upload any sketch to obtain it

No drivers were downloaded; it just worked. Despite knowing that I should quit while I'm ahead (so I can have dinner at a reasonable time), I wanted to try IPv6 from EtherSia! I went to Sketch (menu) > Include Library > Manage Libraries. I put "ethersia" in the Search box, it showed up, I clicked on Install next to the (most recent) version number, and that was just too easy. File > Examples > EtherSia > Minimal. I knew I would want it, so I brought up Tools > Serial Monitor as well. I switched it to 38400 baud (as mentioned in the sketch), and again it just works! I could even ping6 it!

Now I just need to see how it feels about reporting temperature and humidity from HTU21D over IPv6 into my monitoring. That can wait until after dinner!

Thursday, November 17, 2016


The NASA channel on my Roku wasn't working this afternoon before the launch; luckily we checked on it early enough to get through the ads without missing the launch. So I turned to Google, and I learned that ...

  1. The NASA public Roku channel has ads (from the channel dev).
  2. And more importantly, there's a NASA private Roku channel that is HD, with multiple streams (I remember when I couldn't watch the ISS because something else was on the NASA public Roku channel!), and no ads! (ref1 and Space Time, ref2 for NASA HD link)

Friday, October 21, 2016

Greasy Knees

A few weeks ago, on both Monday and Tuesday, I got a grease mark on the knee of my pants. The first one didn't wash out with just a stain spray, so I looked for other treatments. (What is it with me lately, and marks that don't come out in the laundry?)

I am happy to report that dish soap (I had Palmolive in my kitchen) and a little scrub brush action before letting it sit in the laundry basket for several days worked just fine!

For grass stains, also common on knees, read Grass Stain Removal at House Cleaning Central, especially the note not to use ammonia, degreaser or alkaline detergent. I was impressed with how much peroxide and bleach removed (although not all).

Saturday, September 24, 2016

The Battle of Chocolate Milk

There was an incident last month, between chocolate milk and gravity. Gravity won, of course; and I ended up with chocolate milk spattered far and wide. The Very First Step is to make sure no one is freaking out about this! A certain child was sure he was going to get into big trouble. I'm still trying to clean up the impact, but it clearly wasn't intentional, and these accidents aren't common. The hardest hit were a white teeshirt and my hardwood floor. (Of course the shirt was white. This can't be easy!)

After cleaning up the main splatter and the child, I ran cold water over the white shirt. This reduced the chocolate marks, but did not remove them. I tried soaking the shirt in water; no improvement. I tried soaking the shirt in salted water; no improvement. Salt acts as a water softener to make water-for-cleaning more effective, but this chocolate was more stubborn. Next I put the shirt in the washing machine and washed it in cold water with OxiClean White Revive Whitener. The stains might have been lighter, but were still present. So I did some research:

Based on that research and availability, I tried soaking the formerly-white shirt in a solution of water, hydrogen peroxide, and baking soda (I purchase the last two in large sizes because they're both so handy). Success!!!

I didn't try ammonia or an ezymatic cleaner or club soda (didn't have any); I figured the bubbles of hydrogen peroxide and baking soda could approximate the fizziness of club soda, assuming that's how it is effective. I didn't try cream or full-fat milk because I don't keep that around either. I have Borax; it's a component in my homemade laundry powder, so I figured it would be tested in the washing machine soon enough.

I've been known to forget what worked last time, so I'm sharing with everyone.

Saturday, July 16, 2016

TIL: Geany and Shellcheck

I've been using Geany for a while. When I selected it, I was looking for a cross-platform text editor with convenience features for writing code because all of the IDEs I had tried were cumbersome. I wanted syntax highlighting and code folding. I was happy that Geany also includes auto-completion, project support, vertical selection (when that's useful, nothing else will work as quickly), and plugin extensibility.

More recently, I ran across Shellcheck and was impressed with what it detects. Of course I could use it online or on the command line, but wouldn't it be nice to have it integrated with Geany also? Sure it would! So I proceeded to look for a Shellcheck plugin for Geany, in a case of retrospectively-humorous linear thinking.

The punchline is that Geany doesn't need a plugin; it has a far simpler approach. When I open one of my bash scripts in Geany, the first menu item under the Build menu is Lint. Guess what lint on a shell script runs? Of course it runs shellcheck! So today I learned that the feature I wanted in Geany was already there in the most appropriate place ... once I broke out of the linear thinking.

Saturday, July 9, 2016

Stay Well!

A friend of mine was in the hospital two weeks ago due to a condition triggered by a reduced immune system. That got me thinking ...

Immune System Stressors

  • emotional stress
  • physical stress
    • inadequate sleep
    • athletic overtraining
  • smoking
  • diet
    • high fat consumption
    • alcohol consumption
    • high refined sugar consumption
    • inadequate protein consumption
    • inadequate calorie consumption
    • inadequate vitamin consumption, including inadequate Vitamin B12
    • inadequate mineral consumption, including inadequate iron and/or zinc
    • inadequate water intake
    • food allergies, mostly if not avoided
    • food intolerances, mostly if not avoided
  • UV (sunburn!) and other types of radiation
  • chemical sensitivities
  • environmental and occupational chemical exposure
  • any immunodeficiency or autoimmune condition
  • common viral or bacterial infections
  • cirrhosis of the liver
  • certain drug therapies, including prednisone
  • blood transfusions and surgery
  • over age 40

[1] accessed 2016-07-09

How to Help Your Immune System

  • wash your hands frequently to avoid infection
  • get adequate sleep: 8 to 10 hours a night
  • exercise regularly, but do not over-exercise
  • maintain a healthy weight
  • do not smoke
  • do not drink alcohol, or only in moderation
  • drink plenty of fluids, especially water
  • reduce in your diet: saturated fat, refined sugar
  • adequate amounts in your balanced diet: protein, calories, vitamins, minerals, and essential fatty acids
  • eat a diet high in fruits, vegetables, and whole grains
  • cook meats thoroughly to avoid infection
  • do not over-eat
  • to counter stress, try massage, mindfulness relaxation techniques, and spend time with good friends who make you laugh
  • avoid false friends who tell you how to feel, and who your friends are/should be
  • avoid allergies and food intolerances
  • avoid sunburn
  • avoid exposure to radiation and unhealthy chemicals
  • control your blood pressure
  • get regular medical screening

[2] accessed 2016-07-09