ESP8266 sensorius temperatūrai, drėgmei ir slėgiui stebėti - v0.1

ESP8266 sensorius temperatūrai, drėgmei ir slėgiui stebėti - v0.1

Iš turimų Aliexpress komponentų greitu būdu sujungiau kelis sensorius. Padėjau rūsy ir bute. Čia surašau kaip viską dariau.

Tikslas

Pasidarė įdomu kokia temperatūra ir drėgmė rūsy skirtingais metų laikais. Noriu ten pasidaryti mini dirbtuves - reikia nuspręsti dėl papildomo vėdinimo ir (ap)šildymo.

Naudojami senų Nokia telefonų akumuliatoriai. Kad nereikėtų dažnai krauti, sensorius miegantis - pabunda kas 10 min, išsiunčia parametrus ir vėl užmiega.

Parametrai - akumuliatoriaus būklė, temperatūra, drėgmė ir slėgis - siunčimi MQTT protokolu į namų NAS serveriuką - QNAP TS-253A. Internete daug pavyzdžių kaip tam panaudoti Raspberri Pi, bet su Qnap daug paprasčiau - pasirenki reikiamus servisus ir aktyvuoji. Apie tai atskiru postu.

Naudojami komponentai

BL-5B mėtėsi stalčiuje - prikėliau dar vienam pagyvenimui prieš utilizuojant. Kitą kart naudosiu brangesnius ir talpesnius 3.7V 3400MAh 18650.

Jungimo Schema

image|690x276

image|690x276

Programavimas

Sensoriaus programavimui naudoju Micropython.

main.py

print("[INFO] main.py")

from machine import Pin, I2C, RTC, ADC, reset_cause, deepsleep, DEEPSLEEP, DEEPSLEEP_RESET
# import machine
import bme280
import utime
# from umqtt.robust import MQTTClient
from umqtt.simple import MQTTClient

if reset_cause() == DEEPSLEEP_RESET:
	print(b'[INFO] woke from a deep sleep')
else:
	print(b'[INFO] power on or hard reset')
	
device_id = "sensor02"
mqtt_server_ip = "192.168.88.69"

def connect_mqtt():
	global client
	global device_id
	global broker_ip
	client = MQTTClient(device_id, mqtt_server_ip)
	# client.DEBUG = True
	client.connect(clean_session=False)
connect_mqtt()



i2c = I2C(sda=Pin(4), scl=Pin(5))
bme = bme280.BME280(i2c=i2c)


adc = ADC(0)

while True:
	# print/send temperature values
	# print("[INFO] publishing...")
	print(bme.values)
	
	temperature, pressure, humidity = bme.values
	# temperature = "{:.1f}".format(data[0])
	
	adc_value = str( adc.read() )
	voltage = "{}".format( round(3.27 / 713 * adc.read(), 2) )
	# print("adc_value:", adc_value)
	print("voltage:", voltage)
	
	client.publish(b"stat/sensor02/temp", str(temperature))
	# client.publish(b"stat/sensor02/pres", str(pressure))
	client.publish(b"stat/sensor02/hum", str(humidity))
	client.publish(b"stat/sensor02/v", str(voltage))
	# client.publish(b"stat/sensor02/heap", str(gc.mem_free()))
	
	print("[INFO] stopping for 10s ...")
	utime.sleep(10)  # number of seconds between each Publish
	
	print("[INFO] deep sleeping...")
	# configure RTC.ALARM0 to be able to wake the device
	rtc = RTC()
	rtc.irq(trigger=rtc.ALARM0, wake=DEEPSLEEP)
	rtc.alarm(rtc.ALARM0, 1000 * 60 * 10)# fire after 10 mins
	deepsleep()

Nuorodos