Aplikasi MQTT, Node-Red, InfluxDB dan Grafana

import time
from microcontroller import cpu
import board
import digitalio
import busio
import binascii
import sys
import re
import adafruit_ssd1306
import adafruit_requests as requests
from adafruit_espatcontrol import adafruit_espatcontrol
from adafruit_espatcontrol import adafruit_espatcontrol_wifimanager
import adafruit_espatcontrol.adafruit_espatcontrol_socket as socket
import adafruit_minimqtt.adafruit_minimqtt as MQTT
import json


# Get wifi details and more from a secrets.py file
try:
    from secrets import secrets
except ImportError:
    print("All secret keys are kept in secrets.py, please add them there!")
    raise

# mula penggunaan UART UART connection to the ESP8266 WiFi Module.
wifiUart = busio.UART(board.GP16, board.GP17, receiver_buffer_size=2048)  # Use large buffer as we're not using hardware flow control.
esp = adafruit_espatcontrol.ESP_ATcontrol(wifiUart, 9600, debug=False)
wifi = adafruit_espatcontrol_wifimanager.ESPAT_WiFiManager(esp, secrets)

# mendefinisikan penggunaan UART

uart = busio.UART(board.GP4, board.GP5, baudrate=9600, receiver_buffer_size = 2048)

# Mendefinisikan I2C untuk OLED
LCD_SDA = board.GP2
LCD_SCL = board.GP3
i2c = busio.I2C(scl=LCD_SCL, sda=LCD_SDA)
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c)


# Setup a feed named `testfeed` for publishing.
default_topic = "/environment/environment"
# Define callback functions which will be called when certain events happen.
def connected(client, userdata, flags, rc):
    print("Connected to MQTT broker! Listening for topic changes on %s" % default_topic)
    client.subscribe(default_topic)

def disconnected(client, userdata, rc):
    print("Disconnected from MQTT Broker!")

def message(client, topic, message):
    print("New message on topic {0}: {1}".format(topic, message))

# Connect to WiFi
print("Connecting to WiFi...")
wifi.connect()
print("Connected!")

MQTT.set_socket(socket, esp)

# Initialize a new MQTT Client object
mqtt_client = MQTT.MQTT(
    broker=secrets["mqtt_broker"],
    username=secrets["mqtt_username"],
    password=secrets["mqtt_password"],
    port=secrets["mqtt_port"],

)

mqtt_topic = "/environment/environment"
# Setup the callback methods above
mqtt_client.on_connect = connected
mqtt_client.on_disconnect = disconnected
mqtt_client.on_message = message

# Connect the client to the MQTT broker.
mqtt_client.connect(  )

print("Subscribing to %s" % mqtt_topic)
mqtt_client.subscribe(mqtt_topic)

print("Publishing to %s" % mqtt_topic)
mqtt_client.publish(mqtt_topic, "Hello Broker!")

print("Unsubscribing from %s" % mqtt_topic)
mqtt_client.unsubscribe(mqtt_topic)

print("Disconnecting from %s" % mqtt_client.broker)
#mqtt_client.disconnect()

message_started = False
message_print = []
allstring = ""
printshow = False

# Mula Loop
# Setup AT+TEST=RXLRPKT
uart.write(bytes("AT+MODE=TEST", "utf-8"))
print("Checking.. AT+MODE=TEST")
while uart.readline():
    print(uart.readline())
uart.write(bytes("AT+TEST=?", "utf-8"))
print("Checking.. AT+TEST=TEST=?")
while uart.readline():
    print(uart.readline())

uart.write(bytes("AT+TEST=RXLRPKT", "utf-8"))
print("Checking.. AT+TEST=RXLRPKT")
while uart.readline():
    print(uart.readline())

#mqtt_client.connect(  )
while True:
    try:
        byte_read = uart.readline()  # read up to 32 bytes
        if byte_read:
            allstring += byte_read.decode()
            printshow = True
        else:
            if printshow:
                if allstring:
                    left = '"3C'
                    right = '3E"'
                    dataRead = re.search(
                        r"" + left + "(.*?)" + right + "", allstring
                    ).group(1)
                    clearstring = binascii.unhexlify(dataRead).decode("utf8")
                    print(clearstring)
                    letter_list = clearstring.split(",")
                    temperature = letter_list[0]
                    humidity = letter_list[1]
                    co2 = letter_list[2]
                    oled.fill(0)
                    #Lukis segiempat sama
                    oled.rect(10, 10, oled.width-10, oled.height-10, True)     
                    #paparkan pada OLED
                    oled.text("Demo RX Receiving",20,20,1)
                    oled.text("CO2      :" +co2, 20, 30,1)
                    oled.text("Temp     :"+temperature, 20, 40, 1)
                    oled.text("Humidity :"+humidity, 20, 50, 1)
                    oled.show()
                    print("Publishing to %s" % mqtt_topic)
                    brokers_out={"CO2":co2,
                                "Temp":temperature,
                                "Humidity":humidity
                                }
                    data_out=json.dumps(brokers_out)
                    mqtt_client.publish(mqtt_topic, data_out)
                allstring = ""
                printshow = False
    except ValueError as e:
        # print(e)
        continue
    except AttributeError as ea:
        # print(ea)
        continue
    except KeyboardInterrupt:
        sys.exit()
Code language: Python (python)

Leave a Reply

Alamat e-mel anda tidak akan disiarkan. Medan diperlukan ditanda dengan *

Related Post

Memaparkan bacaan sensor Grove CO2 di atas paparan Grove OLED menggunakan circuitpython dan Seeeduino XIAO RP2040Memaparkan bacaan sensor Grove CO2 di atas paparan Grove OLED menggunakan circuitpython dan Seeeduino XIAO RP2040

Hari ini kita akan melihat bagaimana caranya untuk membaca dari sensor Grove CO² dan memaparkan di atas paparan Grove OLED. komponen yang digunakan adalah : Penderia (sensor) Grove CO2, Temperature