Automatic Home Humidistat and HVAC Logger

Hemi345

Senior Member
About five or so years ago I built a Humidistat based on a PICAXE 18M2 on perf board. You can find that project HERE. A couple years ago I decided I wanted to start on version 2 so I've been taking my time thinking about everything I wanted to do with it. About a year ago I noticed the operating voltage it was reporting/logging was slowly creeping up. After power outages, I noticed the voltage would be back to 4.9-5V but about six months ago it said running at 8.9VDC. I just figured there must be something wrong with the voltage reference and dismissed it until a massive hail storm took out the little DS18B20 on the side of the house. While repairing that, I measured the voltage with my multimeter and sure enough, it was nearly 9V! Amazingly everything was still running but I knew I was on borrowed time so I've been putting more effort into version 2 that will have move functionality and features.

Requirements for the new project:
1) Control the whole house humidifier based on outdoor temperature and home humidity level - like version 1 did
2) Log when the HVAC turns on/off - be interesting to see how many times it runs per day and for how long
3) Log the indoor humidity level, outdoor, return air, supply air temperatures - really curious what the supply air temp is while the furnace/AC is running
4) Transmit/upload all details wirelessly to my IoT website - because graphs are fun
5) Incorporate a cute little OLED display and buttons on the device for local changes - switchin' things up from the two digit seven segment display
6) Bonus points if I automate operating the Summer/Winter damper on the humidifier - a standard size servo and stepper motor are sitting in a box doing nothing, might as well use one of them

Even thought this project isn't finished, I'm going to post here as a build log since the blogs are no more.

Next up, details about the "return air sensor" module.
 

Hemi345

Senior Member
So I begin designing a remote return air sensor module almost three years ago so I could use the I2C-based Si7006 temperature and humidity sensor. Since I2C comms shouldn't really go "off-board", I put an PICAXE 08M2 on this module to communicate the return ducting air temperature and humidity with the main humidistat (still thinking I'd continue using Humidistat v1). Then I could move the main humidstat out of the duct to somewhere more convenient. I designed the PCB with an RJ45 jack on the board so I could use ethernet cabling for easy connections. When it arrived, I soldered up everything and programmed the 08M2 to check the Si7006 sensor. Then threw it in a drawer where it sat unused for a few years. Below is the schematic and PCB pictures of it mounted in the old manual humidistat face plate and temporarily installed in the return air ductwork.
1541800841688.png1541800937273.pngreturn air sensor 3.jpg

I had put headers on the board for reconnecting the outdoor DS18B20 1-Wire temp sensor and another DS18B20 that I would put in the supply air ducting. I don't know why I did this, but I wired those two sensors to the ethernet jack to utilize the PICAXE on the main humidistat board to read them rather than just using the 08M2... probably because I was sorta out of ports on the 08M2 (when you factor in serial comms) and I probably had surface mount 08M2s on hand. I really should have just used a 14M2 and used it to read all the sensors.... calling it the "Remote sensor module". But I digress.

I designed the HumidiStat v2 based on utilizing this return air sensor BUT with the option of replacing this with something more simple down the road. More on that next.
 

Hemi345

Senior Member
So here's the final schematic for HumidiStat v2:
1541802059193.png

What it's packing:
- NCP1117DT33 voltage regulator - provide 1A @ 3.3V
- PICAXE 20X2 called uC "A" - main brains of it all
- PICAXE 14M2 called uC "B" - will report all sensor readings to the 20X2
- DS3232M - real time clock w/ a little SRAM and temp sensor
- 24FC512 EEPROM - used to store all sorts of stuff; LCD/OLED screen text, etc.
- VOM617A optocoupler - used to determine when the HVAC is running or off.
- ASSR-1611 solid state relay - great little 6pin DIP IC popular with model train controls.
- ESP8266 - to wireless upload/log all HumidiStats (<-- see what I did there) to my IoT web site.
- enough headers and jacks to change the world

The PICAXE 20X2 will be the main processor for the system. It's connected to the VOM617A optocoupler which is used to 'sense' when the HVAC system (24VAC) turns on /off. It talks to the solid state relay to turn on/off the water solenoid on the humidifier. It will communicate over I2C to the EEPROM, RTC, OLED display, talk to the ESP8266, and drive a few status LEDs.

The PICAXE 14M2 is second in command to the 20X2. The 20X2 will issue a request to receive the latest sensor readings to the 14M2 by pulling the dedicated "RTR" pin high. The 14M2 will then transmit the readings to the 20X2 using RS232 serial comms at which point the 20X2 pulls the RTR pin back low. The 14M2 immediately reads its temp sensors and sends a request to receive the return air temp and humidity % from the 08M2 on the return air sensor module. Who then, after sending the data, also checks the Si7006 so it's ready for the next request to send. The temp and humidity readings are 10-15 seconds old when they are communicated to the 20X2, but totally adequate for this environment where things change pretty slowly. The 14M2 has a few additional pins broken out for future use, like the I2C pins. I'll probably run the stepper motor or servo off of this uC.

The DS3232M real time clock (RTC) is used to time stamp when the HVAC turns on and off, and I'll also make use of the battery backed SRAM for saving things that I want to write often and need available after a power outage but would normally wear out a normal EEPROM. Instead of using a battery to keep the time/SRAM contents during power outage, I'm using a 5.5V .33F super capacitor that is kept charged up to the VDD voltage of 3.3V. Maxim's super capacitor calculator indicates this should keep the time and SRAM contents for at least 24 hours. The DS3232M, although expensive, is nice because it utilizes MEMS instead of needing an external crystal. The time keeping is temperature compensated so it doesn't have these wild time fluctuations like the DS1307 or DS1337 I used to use. Sitting next to a HVAC system that will be very hot (when furnace is running), or very cold (when A/C is running), the DS3232M seemed like a wise idea.

The 24FC512 EEPROM will be used for storing the various labels and text for the OLED display that would easily fill up the 20X2's EEPROM or precious program memory. I've been reading about using an EEPROM for additional program slots... maybe this will be an option? At any rate, having spare nonvolatile memory available is never a bad idea.

The ESP8266 (ESP-01) is plugged into a 2x4 header and will communicate with the 20X2 over serial comms. I'll build a web interface to read the current stats and change humidity levels without having to go into the basement.

An RJ45 jack is used to connect this board to the return air sensor module. I created the footprint for the Amphenol jacks years ago for a datacenter project and I try to use these when possible because their super easy to solder and offer a robust connection with 8 pins/conductors.

Next up, a picture of the PCB and soldered in components. %101011 continued...
 
Last edited:

Hemi345

Senior Member
PCBs fresh from OSHPark:
20181017_173949.jpg
I put a few headers on the back of the board to give the project a clean appearance when connecting the OLED display, buttons, etc.

Solder paste applied, parts positioned and warming up in my skillet:
20181024_222313.jpg
Out of the pan and cooling on the counter:
20181024_222854.jpg
After soldering in all the through hole parts, I started work on the enclosure. I'm using one of those water tight boxes (although no longer water tight after cutting some holes for port access). These boxes are great because they're 1) cheap, 2) very durable and 3) you can get them with a clear lid to see/show off what's inside. Only downside with them is I have been unable to find any drawings to indicate standoff spacing/placement so as with other projects I've used these on, I use a thin piece of clear acrylic screwed down to the box which allows me to place the PCB virtually anywhere I want on stand-offs.
20181030_202606.jpg
More to come...
 

Hemi345

Senior Member
When the HVAC's blower fan is running, 24VAC is provided to power the humidifier. I took one wire from the 24VAC and twisted it together with one of the wires on the humidifier's water solenoid using a wire nut, then ran it to one of the "IN" terminals on the PCB (the red wire). The other wire from the 24VAC is run directly to the other "IN" terminal on the PCB (blue). Then I connected the other wire from the water solenoid to the "OUT" terminal on the PCB (the yellow wire):

testing solenoid ctrl.jpg
In the old Humidistat v1, I didn't have a way to sense when the HVAC blower was running. Now with both sides of the 24VAC coming on board, I use a diode, capacitor and high value resistor to rectify the voltage to DC. The DC voltage lights up the "HVAC ON" LED and the LED inside the optocoupler when the HVAC is running. The transistor output side of the optocoupler is pulled high using the 20X2's built-in pullups while the HVAC is off, but driven low when the HVAC is running. The blue and yellow wire screw terminals are also connected to the SSR so I can switch the solenoid on/off.

In the picture above, I toggled the SSR on without the HVAC running and realized the blue LED is ridiculously bright even with a 680ohm resistor (@3.3V)... ug. I'll have to tone that down with a black Sharpie as I don't want to muck up the board trying to resolder by hand that 0805 resistor with a higher value.

You can see the multicolored ribbon cables snaking out from underneath the board. Those are connected to headers on the backside of the board for the buttons and OLED display...

Speaking of which, the plan was to use a 0.91" 128x32 OLED display but evidently it just wasn't meant to be. I had put a header on the PCB to easily connect it (just below the screw terminal block), but after a shipping snafu on the first one, then the second arrived DOA, I picked up a little bit bigger 0.96" yellow and blue OLED display from one of my favorite Ebay sellers. Thanks to work from a few forum members here on configuration code, I had this gem up and running in no time. I think having the additional lines was the right call anyway:

oled 1.jpg
After playing around with the exposure settings on the camera, I was able to get a decent picture of it in action. You can see the date and time are pulled in from the RTC. The outside and supply air DS18B20s and the Si7006 humidity and temp sensor on return air are working well. "Z: 4" is the zone the humidity target is in (an old carryover from the Humidistat v1, doesn't mean much to anyone other than me, so I might remove it). "T: 30%" is the target humidity for the zone. I'm using calibadc to get the voltage the PICAXE 08M2 is running at... this is at the end of about 5ft of CAT5E ethernet cable. The yellow block in the upper left is a count down timer of sorts that slowly shrinks to indicate how much time is left till the screen shuts off. I've heard burn in is an issue with these displays so I have it automatically clear after ~20 seconds of inactivity by the user.

Back to working on the enclosure. I decided to mount the three buttons and the OLED in the clear plastic lid and mask about half of it using black paint (sprayed on the inside). This will allow me to still see the LEDs on the PCB but hide the wires and frame around the OLED for a cleaner look. I'll get some good pics of it and upload them next time.
 

Hemi345

Senior Member
Here are a few photos of it successfully controlling humidity in my home:

operational 1.jpg

Don't let the photos fool you, the OLED is very clear and sharp, it just doesn't photograph well.

The water solenoid on the humidifier can be seen in the upper left corner of this photo:

operational.jpg

The enclosure is secured to the ducting using two large pieces of industrial velcro. The ESP8266 has been installed (lower left) and is logging to my IoT website.

Connections on the side for power, 3-pin programming header, and cable for connecting to the remote air sensor board mounted on the return air duct:

Power, programming, remote air sensor connections.jpg

You can see one of the LEDs in the RJ45 jack lit to indicate it is powering the remote air sensor board (return power on pin 5 in schematic above). The other LED blinks when data is transmitted from the remote air sensor board (every 5 seconds while display is on or every 10 seconds when it's off).
Here's a photo of the entire setup:

insitu.jpg

Screenshot of stats logged to my website:
Logging.PNG

Next time, I'll post the programs for the three PICAXEs.
 

Hemi345

Senior Member
Here's the code for the Return Air Sensor (08M2 in the return air duct):

Code:
#picaxe 08M2
#terminal 4800
#no_data

#rem
This program is for the 08M2 uC (microcontroller) on the remote air sensor board. It's job is
to check return air ducting temperature and humidity and send it back to the 14M2 uC "B" on 
the main humidistat board when requested.

I shouldn't need to use peek/poke because this program is so small, but I've left it in.  
Temp and Hum could be just stored in their dedicated int and dec variables for quicker transmit.
#endrem

pause 2000    'give me a little time to download a new program please! (and init the debug terminal)
disconnect    'prevent new program download check so SI/C.5 can be used as Ready2Receive (RTR) pin

'pins
symbol pBr2r    = pinC.5 'pin 8 in RJ45 will be pulled high by 14M2 (uC "B") when it's Ready to Receive 
symbol pComms    = C.4     'pin 6 in RJ45 for inverted comms with 14M2 on main humidistat board
'constants
symbol cHumTemp    = %10000000    'SI7006-A20
symbol cI2cSpd    = i2cfast
symbol cCommSpd = N2400_4
'variables
symbol bStatus= bit0    '0 = ready, 1 = sent; 08M2 transmission status
symbol bThCheck    = bit1    '0 = temperature, 1 = humidity; which register to read in loop
symbol bRst08M2    = bit2    '0 = no, 1 = yes; 08M2 was reset
symbol vCurTime = b1    'store the current time
symbol vVoltInt = b4    'operating voltage integer
symbol vVoltDec    = b5    'operating voltage decimal
symbol vSenMsb    = b6    'MSB for sensor readings
symbol vSenLsb    = b7    'LSB for sensor readings
symbol wSen        = w1    'b8,b9: Used for sensor readings
symbol vTempInt    = b8    'temperature integer
symbol vTempDec    = b9    'temperature decimal
symbol vHumInt    = b10    'humidity integer
symbol vHumDec    = b11    'humidity decimal
symbol wGenVar0    = w12    'b24,b25:
symbol wGenVar1 = w13    'b26,b27:

sertxd(13,10,"HumidiStat Return Air Sensor PCB v1",13,10)
sertxd ("Author: Hemi345",13,10)
sertxd ("Program: ",ppp_filename,13,10)
sertxd ("Downloaded: ",ppp_date,13,10)

hi2csetup i2cmaster, cHumTemp, cI2cSpd, i2cbyte
hi2cin 0x84,(wGenVar0)
sertxd("Si7006 Ver ",#wGenVar0,13,10)
gosub getVolts
sertxd ("Voltage: ",#vVoltInt,".",#vVoltDec,"V",13,10)
bRst08M2 = 1    'this device was reset
gosub resetTime
gosub getTempHum

main:
    do
        if vCurTime <> time then
            sertxd(#vCurTime," ")    'display time counter once per second
            vCurTime = time
        end if
        if pBr2r = 1 AND bStatus = 0 then
            sertxd (13,10,"RTR detect!")
            gosub transmitData        'transmit temperature and humidity to 14M2
            gosub getVolts
            gosub getTempHum
            gosub resetTime
        end if
        if pBr2r = 0 and bStatus = 1 then
            sertxd (" RTR clear! ")
            bStatus = 0             'reset status to: ready to send
        end if
        if time >= 255 then
            gosub resetTime
        end if
    loop

resetTime:
    disabletime
    let time = 0
    enabletime
    return

transmitData:
    peek 52, vTempInt
    peek 53, vTempDec
    peek 54, vHumInt
    peek 55, vHumDec
    serout pComms,cCommSpd,("HRAS",vTempInt,vTempDec,vHumInt,vHumDec,vVoltInt,vVoltDec,bRst08M2)
    sertxd (" Data sent.",13,10)
    bStatus = 1        'update status to: send finished
    bRst08M2 = 0    'clear the reset bit after first transmission since reset
    return

getTempHum:
    hi2csetup i2cmaster, cHUMTEMP, cI2cSpd, i2cbyte
    bThCheck = 0    ;bit to loop through temp and humidity on the Si7006
    for bThCheck = 0 to 1 step 1
        if bThCheck = 0 then
            hi2cin 0xE3,(vSenMsb,vSenLsb)    'read in temperature
        else
            hi2cin 0xE5,(vSenMsb,vSenLsb)    'read in humidty
        end if
          wSen = vSenMsb * 256
          wSen = wSen + vSenLsb
        sertxd ("Raw ",#wSen)
        if bThCheck = 0 then    
            sertxd (" T ")
            wSen = 17572 ** wSen - 4685    'formula for temperature
            if wSen > 13000 then        '0 deg C and below
                wSen = -wSen             ': sertxd (" A- = ",#wSen,13,10)
                wSen = wSen * 9 / 5        'convert from Celsius to Farenheit
                wSen = wSen - 3200         ': sertxd (" -3200=",#wSen,13,10)
                if wSen > 13000 then     'temperature is above 0 deg F but below 32 deg F
                    wSen = - wSen         ': sertxd (" B- =",#wSen,13,10)
                end if
            else    'above freezing
                wSen = wSen * 9 / 5        'convert from Celsius to Farenheit
                wSen = wSen + 3200         ': sertxd (" +3200=",#wSen,13,10)
            end if
        else 
            sertxd (" H ")
            wSen = 12500 ** wSen - 600    'formula for humidity
        end if
        vSenMsb = wSen / 100        'integer
        wGenVar0 = vSenMsb * 100
        vSenLsb = wSen - wGenVar0    'fraction
        sertxd (#bThCheck,": ",#vSenMsb,".",#vSenLsb)
        if bThCheck = 0 then
            poke 52, vSenMsb     'put temperature integer into RAM
            poke 53, vSenLsb     'put temperature decimal into RAM
            sertxd (" F",13,10)
        else 
            poke 54, vSenMsb     'put humidity integer into RAM
            poke 55, vSenLsb     'put humidity decimal into RAM
            sertxd (" %",13,10,13,10)
        end if
        'inc bThCheck
    next bThCheck
    return

getVolts:
    calibadc10 wSen
    wSen = 52378 / wSen * 2 
    vVoltInt = wSen / 100
    vVoltDec = wSen % 100 
    return
 

Hemi345

Senior Member
Program running on 14M2 (uC "B" on main PCB):
Code:
#picaxe 14M2
#terminal 4800
#no_data

#rem
This program is for the 14M2 uC (microcontroller) on the main HumidiStat board. 
The 14M2 is labeled uC "B" on the main board. It is used to read outdoor and supply ducting 
temperatures using DS18B20 sensors. It also communicates with the 08M2 on the return air 
sensor board in the return air ducting.

I shouldn't need to use peek/poke because this program is so small, but I've left them in.  
outdoor and supply temps could be just stored in their dedicated int and dec variables.
#endrem

pause 2000    'give me a little time to download a new program please! (and init the debug terminal)

'pins
symbol pAr2r    = pinC.2 'will be pulled high by 20X2 (uC "A") when it's Ready to Receive 
symbol pAcomms    = C.4    'for inverted comms with 20X2 (uC "A") on main humidistat board
symbol pBr2r    = C.0    'pin 8 in RJ45 will be pulled high by me (uC "B") when I'm Ready to Receive from 08M2
symbol pBcomms    = C.1    'pin 6 in RJ45 for inverted comms with 08M2 on remote air sensor board
symbol pTempOut    = B.2    'pin 2 in RJ45 for DS18B20 outdoors
symbol pTempSup    = B.5    'pin 4 in RJ45 for DS18B20 in supply ducting

'constants
symbol cCommSpd = N2400_4    'slow and steady wins the race

'variables
symbol bStatus    = bit0    '0 = ready, 1 = sent
symbol bCheck    = bit1    '0 = temperature outside, 1 = temperature supply
symbol bContinue= bit2    '0 = no, 1 = yes
symbol bRst14M2    = bit3    '0 = no, 1 = yes : 14M2 was reset

symbol vCurTime = b1    'store the current time
'symbol free    = b2
symbol vSign    = b3    'MSB for sensor readings (only outdoor, if supply is negative, we got problemz!)
symbol vTempInt    = b4    'temperature integer
symbol vTempDec    = b5    'temperature decimal
 
'b6 thru b13 are used by read 1wire serial number (readowsn)
symbol vFamCode = b6
symbol vSn1        = b7
symbol vSn2        = b8
symbol vSn3        = b9
symbol vSn4        = b10
symbol vSn5        = b11
symbol vSn6        = b12
symbol vChkSum    = b13

'these aren't used because i'm poking upper RAM
'symbol vToInt    = b        'temp outdoor integer
'symbol vToDec    = b        'temp outdoor decimal 
'symbol vTsInt    = b        'temp supply integer
'symbol vTsDec    = b        'temp supply decimal

symbol wSen        = w7    'b14,b15: Used for sensor readings
symbol wGenVar0    = w12    'b24,b25:
symbol wGenVar1 = w13    'b26,b27:

sertxd(13,10,"HumidiStat 14M2 uC 'B' PCB v2.0.1",13,10)
sertxd ("Author: Hemi345",13,10)
sertxd ("Program: ",ppp_filename,13,10)
sertxd ("Downloaded: ",ppp_date,13,10)

poke 52, "!" 'put a ! in RAM for sign byte (instead of + or -) to indicate sensor not responding
bRst14M2 = 1    'device was reset
gosub resetTime
gosub getTemps
pause 1000    'give the 08M2 on return air sensor board a little time to get its initial reading done

main:
    do
        if vCurTime <> time then
            sertxd(#vCurTime," ")
            vCurTime = time
        end if
        if pAr2r = 1 AND bStatus = 0 then
            sertxd (" RTR detect!",13,10)
            gosub transmitData    'transmit data to 20X2
            gosub getTemps        'get temps from DS18B20 sensors
            gosub receiveData    'request data from Return Air Sensor board
            gosub resetTime
        end if
        if pAr2r = 0 and bStatus = 1 then
            sertxd (" RTR clear!",13,10)
            bStatus = 0         'reset status to: ready to send
        end if
        if time >= 255 then
            gosub resetTime        'vCurTime is only a byte var, reset the timer (word)
        end if
    loop

resetTime:
    disabletime
    let time = 0
    enabletime
    return

transmitData:
    bptr = 52
    serout pAcomms,cCommSpd,("BuC",@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,bRst14M2)
    'serout pAcomms,cCommSpd,("BuC",vToSign,vToInt,vToDec,vTsInt,vTsDec,vTempInt,vTempDec,vHumInt,vHumDec,vVoltInt,vVoltDec,b08Rst,b14Rst)
    sertxd (" Data sent:")
    for wGenVar0 = 52 to 64 step 1
        peek wGenVar0, wGenVar1 : sertxd (#wGenVar1, " ")
    next wGenVar0
    bRst14M2 = 0    'clear reset bit after first transmission since 14M2 was reset
    bStatus = 1        'update status to: send finished
    return
    
receiveData:
    bptr = 57
    sertxd ("RTR sent.",13,10)
    high pBr2r    'tell the return air sensor board that I'm ready to receive
    serin [3000],pBcomms,cCommSpd,("HRAS"),@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptr  'vTempInt,vTempDec,vHumInt,vHumDec,vVoltInt,vVoltDec,b08Rst
    low pBr2r    'done receiving, tell the return air sensor board I'm no longer listening
    bptr = 57
    sertxd ("Rx'd: ")
    for wGenVar0 = 57 to 63 step 1
        wGenVar1 = @bptrinc
        sertxd (#wGenVar1, " ")
        poke wGenVar0, wGenVar1
    next wGenVar0
    return

getTemps:
    sertxd(13,10,"Get Temps:",13,10)
    bCheck = 0        'bit to loop through two temp sensors
    vSign = "-"        'reset values just in case sensor quits responding
        vTempInt = 0
        vTempDec = 0
    for bCheck = 0 to 1 step 1
        sertxd(" Sensor:",#bCheck," ")
        gosub clear1wireSerial            'reset family code, serial, and checksum to 0
        if bCheck = 0 then
            readowsn pTempOut            'read the 1wire serial number from sensor
            readtemp12 pTempOut,wSen    'read in outside temperature
            gosub tempConvert
            poke 52, vSign
            poke 53, vTempInt
            poke 54, vTempDec
        else
            readowsn pTempSup            'read the 1wire serial number from sensor
               readtemp12 pTempSup,wSen    'read in supply duct temperature
            gosub tempConvert
            poke 55, vTempInt
            poke 56, vTempDec
        end if
    next bCheck
    return

clear1wireSerial:
    bptr = 6
    for wGenVar0 = 6 to 13 step 1
        @bptrinc = 0
    next wGenVar0
    return

tempConvert:
    sertxd("Family:",#vFamCode, " SN:",#vSn1,#vSn2,#vSn3,#vSn4,#vSn5,#vSn6, " ChkSum:",#vChkSum)
    if vFamCode = 0 then
        sertxd(" not detected ",13,10)
    else
        sertxd(" ",#wSen)
        vSign = "+"                  'Display +
        wSen = wSen+880*16**4608-670'Fahrenheit (-67.0 to 257.0)
        if vTempInt > 127 then                       
                vSign = "-"          'Display - 
                wSen = - wSen                                     
        end if
        vTempInt = wSen / 10         'get integer of temp 683 (68.3deg) = 68
        wGenVar0 = vTempInt * 100    
        vTempDec = wSen - wGenVar0    'get decimal of temp 683 (68.3deg) = 3
        sertxd(":",vSign,#vTempInt,".",#vTempDec,13,10)
    end if
    return
 

Mark.R

Member
Another good update and read. One of these days the penny will drop and I'll be able to code like this as I've got loads of stuff in my head that I'd like to do.

one question, what software do you use for your circuit and board designs?
 

Hemi345

Senior Member
Hi Mark, sorry for the late reply. I use Autodesk Eagle for schematic and board design. I stumbled onto Sparkfun's tutorials on using Eagle and they were a big help:
Install and Setup
Creating a schematic
Creating a board
I've created a library (see link in my signature) with all of the through hole and SMD PICAXE chips.

I've been busy learning a little C to program the ESP8266 with custom code. With this project and all past projects using the ESP-01 modules, I've been using the AT firmware that comes with them and it's always a PITA because each time I get a new shipment of them, the AT firmware has changed slightly which requires program changes to the PICAXE code base (not to mention a lot of program space to just configure the ESP). So I'm programming the ESPs configure all the network settings themselves and wait for the PICAXE to send them stuff to post to my IOT website. That will nearly half the program size for the 20X2 and reduce complexity a lot! Plus, when I want to tweak the ESP code, I can just pop it out of the header to update it and leave the PICAXE running/untouched :cool:
 

Hemi345

Senior Member
It's been a little over a year since this project was put into action. It's been running great and actually helped diagnose an issue I was having with a new furnace. Here's an updated screenshot of the updated HumidiStats web page I built that visualizes the data I'm collecting. It is pretty cool to be able to go back a year to last year's data to see how the new furnace compares to the old one it replaced.

HumidiStatsWebUi.png
 

lbenson

Senior Member
Thanks. I've used google charts, and have found some degree of complexity. But that may be inherent in the task. I'll check out the sites you mentioned.
 
Top