Python3 vs Python2 – Playing nice

Like many of my fellow smoke-makers, ol’ Sopwith has been very reluctant to adopt Python3. In my view, Python2.7 is the most stable and flexible version of Python ever released. It is hard to believe the first version of Python3 was released in 2008. Folks – that was six years ago! The time has come to move to Python3.

In my recent work with the AM2315 humidity sensor, I was forced to use Python3 because the quick2wire library I use only runs in the Python3 environment. So, I wrote a Python3 class that wraps the capabilities of the AM2315 sensor.

A couple of important points about Python3. First, installing Python3 on your computer does nothing to your existing Python2.x installation. Python3 is installed in a completely separate location and runs in a separate environment. This means it is very easy to have both version on your system. If you install Python3 on Windows, it will become the default Python version. You can still use Python2.x but you will have to ensure its PATH is set correctly. On Linux you run your Python3 scripts using python3 from the command prompt.

Second, there are a few things in Python3 that you must understand up front. The biggest gotcha for most people is that the print statement is now a function (print()). This is a very good thing although it may take you some time to internalize this change. Also, all ambiguities about Unicode are gone in Python3. This is a big change. You must now think of strings as ‘text’ and all other data as ‘bytes.’ This is truly ‘elegant’ as they say. Once you understand how this works it makes much more sense.

Sopwith recommends that you write all new Python code in Python3. Whether you want to port your old code to Python3 is up to you.

Continue reading

Revisiting the AM2315 Humidity Sensor

I was quite surprised by the number of comments and emails I received about the AM2315 humidity sensor. This confirms two things. First, it appears this sensor is quite popular. Based on my experimentation with the device, it is also quite accurate. Secondly, there are a lot of folks hacking this sensor but struggling with the am2315-python-api code.

It was really great of Joehrg Ehrsam to publish the code and make it available to all of us. Unfortunately, the code is poorly formatted and not commented. Also, the code has some timing issues that can result in bogus data. If you look at the below screenshot you can see the sensor is sending garbage.

image001

The AM2315 datasheet warns about this:

“Send read/write command, the host must wait at least 1.5ms, and then send a read sequence, to read back the data…” (pg15).

Failure to get this timing right means you can get inaccurate data from the sensor. I have written Joehrg twice and did not receive a response. So, I decided to write a new Python class to read the sensor data accurately. You can download the code here:

 

Be sure to read the README.txt file and I suggest you run the test_aosong_am2315.py script to be sure the sensor is wired correctly.

Sopwith