-
Notifications
You must be signed in to change notification settings - Fork 2
/
code-receiver-MQTT. py
157 lines (133 loc) · 5.09 KB
/
code-receiver-MQTT. py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# This example extend code-sensor-receiver and add function to send variables thru MQTT using esp-atcontrol (wifi esp8266)
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 untuk LORA-E5
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
# Setup AT+TEST=RXLRPKT
uart.write(bytes("AT+MODE=TEST", "utf-8"))
print("Checking.. AT+MODE=TEST"
AT+TEST=RXLRPKT")
while uart.readline():
print(uart.readline())
# Mula Loop
while True:
try:
byte_read = uart.readline() # baca satu baris dari LORA-E5
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)
# tukar dari HEX ke String
clearstring = binascii.unhexlify(dataRead).decode("utf8")
print(clearstring)
# buat list, Asingkan dengan ","
letter_list = clearstring.split(",")
temperature = letter_list[0]
humidity = letter_list[1]
co2 = letter_list[2]
# mula paparan OLED
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)
# formatkan dalam string
brokers_out={"CO2":co2,
"Temp":temperature,
"Humidity":humidity
}
# format dalam JSON
data_out=json.dumps(brokers_out)
# hantar JSON ke MQTT
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()