-
Notifications
You must be signed in to change notification settings - Fork 0
/
rpi-matrixMQTT.py
92 lines (74 loc) · 2.14 KB
/
rpi-matrixMQTT.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
"""
Filename: rpi-matrixMQTTC.py
Author: Aaron Edlebeck
Description: Accepts messages from an MQTT broker containing 'I:' or 'G:'
followed by a link to an image or gif.
"""
import os
import sys
import signal
from ws281xMatrix import WS281xMatrix
import paho.mqtt.client as mqtt
import requests
path = os.path.dirname(__file__)
screen = WS281xMatrix()
#Handles signal iterrupts
def sigint_handler(signal, frame):
print("KeyboardInterrupt\m")
screen.kill()
sys.exit(0)
signal.signal(signal.SIGINT, sigint_handler)
def clearScreen():
screen.reset()
def setImg(s):
clearScreen()
if s == "I:":
image = os.path.join(path, 'sample.png')
else:
image = os.path.join(path, 'curImg.png')
url = s[2:]
data = requests.get(url).content
with open('curImg.png', 'wb') as handler:
handler.write(data)
screen.render_image(image)
def setGif(s):
clearScreen()
if s == "G:":
gif = os.path.join(path, 'gif2.gif')
else:
gif = os.path.join(path, 'curGif.gif')
url = s[2:]
data = requests.get(url).content
with open('curGif.gif', 'wb') as handler:
handler.write(data)
screen.render_animation(gif, loops = 100)
""" Tuple R,G,B for color """
def setColor(color):
clearScreen()
screen.next_frame(screen.blank_frame(color))
def on_message(client, userdata, msg):
print(f"{msg.topic} {msg.payload}\n")
userInput = str(msg.payload)
userInput = userInput[2:]
userInput = userInput[:-1]
print(userInput + "\n")
if userInput[:2] == "I:":
setImg(userInput)
elif userInput[:2] == "G:":
setGif(userInput)
elif userInput[:2] == "C:":
clearScreen()
else:
print("Incorrect formatting")
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connection successful")
else:
print("Connection failed with code {rc}")
#Setup connection
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.emqx.io", 1883, 60)
client.subscribe("/raspberrypi/matrix/links", qos=0)
client.loop_forever()