See the data feed at
The sensor module uses an ESP32 TTGO display module with the display removed (as I couldn't get it to work with Annex) which is an excellent compact device with LIPO charge control, 2 on-board buttons and a very low sleep current of 120uA. Also in the 3D printed case is a BME280 module with another in a small case mounted on the outside of the greenhouse. I've put the 3D case designs on Thingiverse at .
The sensor is around 30 metres from the AP in the house (by a window behind the tree in the photo) and I found the PCB antenna barely adequate so I cut the antenna track and soldered on a spare 2.4GHz stick antenna which give a much better signal.
The BME280 modules take a couple of milliamps which I didn't want as a constant battery drain so they are powered from ESP32 output pins and only activated when the ESP32 is awake. The wake / sense / transmit cycle takes around 8 seconds before the next sleep. The unit uses a 900mAh mobile phone li-ion battery which lasts about 3 months between recharges.
' ********************************* ' Temperature and Humidity Monitor. ' ********************************* pause 50 Dbg = 0 ' Set to 1 for debug mode ' Debug mode pauses for 15 seconds between measurements instead of sleeping for 10 minutes. ' Can also be entered by holding either of the on-board buttons on power-up. ' Pin assignments I2C.SETUP 13,15 pin.mode 12, output pin.mode 2, output pin.mode 32, output pin(12) = 1 pin(2) = 1 pin(32) = 1 pin.mode 0, input, pullup pin.mode 35, input, pullup if (pin(0) = 0) or (pin(35) = 0) then Dbg = 1 ' Required, otherwise Tidy function throws an error TmpE$ = "" : HumE$ = "" : PreE$ = "" TmpI$ = "" : HumI$ = "" : PreI$ = "" VBatt$ = "" I2C.SETUP 13,15 API_KEY$ = "YourKeyHere" TSpeak$ = "22.214.171.124/update?api_key=" + API_KEY$ if Dbg = 0 then option.WDT 60000 end if ' MAIN SECTION ' ============ do gosub GetBatteryVoltage gosub GetIntTPH gosub GetExtTPH gosub SendThingSpeak if Dbg = 1 then wlog wlog "Wifi : " + RSSI$ wlog "Batt : " + VBatt$ wlog "Temp : " + TmpI$ + chr$(9) + TmpE$ wlog "Hum : " + HumI$ + chr$(9) + HumE$ wlog "Press : " + PreI$ + chr$(9) + PreE$ + chr$(13) end if ' Go back to sleep for 10 minutes if Dbg = 0 then print "Going to sleep" wifi.sleep pause 20 OPTION.CPUFREQ 80 sleep 600 ' 10 minutes else pause 15000 end if loop ' End of main Section ' =================== GetBatteryVoltage: '===================== V1 = adc(34) wlog V1 VBatt = int(V1 * 3.3/2048 * 1.068 * 10) /10 Tidy1 VBatt, VBatt$ RSSI$ = str$(100+wifi.rssi) return GetIntTPH: '=============== if bme280.setup(&h76) = 0 then wlog "Int. BME280 error" TmpI = bme280.temp HumI = bme280.hum PreI = bme280.qfe + 21 Tidy1 TmpI, TmpI$ Tidy0 HumI, HumI$ Tidy0 PreI, PreI$ return GetExtTPH: '=============== if bme280.setup(&h77) = 0 then wlog "Ext. BME280 error" TmpE = bme280.temp HumE= bme280.hum PreE = bme280.qfe + 21 Tidy1 TmpE, TmpE$ Tidy0 HumE, HumE$ Tidy0 PreE, PreE$ return SendThingspeak: '============== TSSend$ = TSpeak$+"&field1="+VBatt$+"&field2="+RSSI$+"&field3="+PreE$+"&field4="+TmpI$+"&field5="+HumI$+"&field6="+TmpE$+"&field7="+HumE$ TSRet$ = WGET$(TSSend$, 80) if val(TSRet$) = 0 then wlog "TS error" + TSRet$ return SUB Tidy0(x,R$) ' Tidy and round r$ = str$(cint(x)) end sub SUB Tidy1(x,R$) ' Tidy to 1 decimal place r$ = str$(cint(x * 10) /10 , "%2.1f") end sub