split code up into modules and add pubsub and timers
This commit is contained in:
parent
05c470197f
commit
001f99db7c
7 changed files with 228 additions and 137 deletions
84
CIRCUITPY/weather_station/airlift.py
Executable file
84
CIRCUITPY/weather_station/airlift.py
Executable file
|
|
@ -0,0 +1,84 @@
|
|||
import os
|
||||
import board
|
||||
import busio
|
||||
import time
|
||||
from digitalio import DigitalInOut
|
||||
import adafruit_esp32spi.adafruit_esp32spi_socket as socket
|
||||
from adafruit_esp32spi import adafruit_esp32spi
|
||||
import adafruit_minimqtt.adafruit_minimqtt as MQTT
|
||||
|
||||
class AirLift():
|
||||
def __init__(self, pubsub):
|
||||
self.ssid = os.getenv("WIFI_SSID")
|
||||
self.wifi_pass = os.getenv("WIFI_PASSWORD")
|
||||
self._setup()
|
||||
pubsub.subscribe("mqtt_pub", self._publish)
|
||||
def _publish(self, body):
|
||||
self.mqtt_client.publish(body['topic'], body['msg'])
|
||||
# print(body['msg'])
|
||||
def reset(self):
|
||||
print("Resetting AIRLIFT")
|
||||
self.esp.reset()
|
||||
time.sleep(5)
|
||||
self._connect()
|
||||
|
||||
def _connect(self):
|
||||
while not self.esp.is_connected:
|
||||
try:
|
||||
print(f"Trying to connect to {self.ssid}")
|
||||
self.esp.connect_AP(self.ssid, self.wifi_pass)
|
||||
except ConnectionError as e:
|
||||
print("Could not connect to AP, sleeping for 10 sec then trying again\n", e)
|
||||
time.sleep(10)
|
||||
continue
|
||||
print("Connected to", str(self.esp.ssid, "utf-8"), "\tRSSI:", self.esp.rssi)
|
||||
|
||||
def _setup(self):
|
||||
esp32_cs = DigitalInOut(board.GP21)
|
||||
esp32_ready = DigitalInOut(board.GP22)
|
||||
esp32_reset = DigitalInOut(board.GP17)
|
||||
spi = busio.SPI(clock=board.GP18, MOSI=board.GP19, MISO=board.GP20)
|
||||
self.esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
|
||||
if self.esp.status == adafruit_esp32spi.WL_IDLE_STATUS:
|
||||
print("ESP32 found and in idle mode")
|
||||
print("Firmware vers.", self.esp.firmware_version)
|
||||
print("MAC addr:", [hex(i) for i in self.esp.MAC_address])
|
||||
self._connect()
|
||||
|
||||
# MQTT inspiration from https://docs.circuitpython.org/projects/minimqtt/en/latest/examples.html
|
||||
def connect(mqtt_client, userdata, flags, rc):
|
||||
print("Connected to MQTT Broker!")
|
||||
print("Flags: {0}\n RC: {1}".format(flags, rc))
|
||||
|
||||
def disconnect(mqtt_client, userdata, rc):
|
||||
print("Disconnected from MQTT Broker!")
|
||||
|
||||
def subscribe(mqtt_client, userdata, topic, granted_qos):
|
||||
print("Subscribed to {0} with QOS level {1}".format(topic, granted_qos))
|
||||
|
||||
def unsubscribe(mqtt_client, userdata, topic, pid):
|
||||
print("Unsubscribed from {0} with PID {1}".format(topic, pid))
|
||||
|
||||
def publish(mqtt_client, userdata, topic, pid):
|
||||
print("Published to {0} with PID {1}".format(topic, pid))
|
||||
|
||||
def message(client, topic, message):
|
||||
print("New message on topic {0}: {1}".format(topic, message))
|
||||
|
||||
socket.set_interface(self.esp)
|
||||
MQTT.set_socket(socket, self.esp)
|
||||
self.mqtt_client = MQTT.MQTT(
|
||||
broker=os.getenv("MQTT_HOST"),
|
||||
username=os.getenv("MQTT_USER"),
|
||||
password=os.getenv("MQTT_PASSWORD"),
|
||||
)
|
||||
|
||||
self.mqtt_client.on_connect = connect
|
||||
self.mqtt_client.on_disconnect = disconnect
|
||||
self.mqtt_client.on_subscribe = subscribe
|
||||
self.mqtt_client.on_unsubscribe = unsubscribe
|
||||
self.mqtt_client.on_publish = publish
|
||||
self.mqtt_client.on_message = message
|
||||
|
||||
print("Attempting to connect to %s" % self.mqtt_client.broker)
|
||||
self.mqtt_client.connect()
|
||||
Loading…
Add table
Add a link
Reference in a new issue