Bildschirmanzeige (Temperatur, Luftfeuchtigkeit, Druck, Versorgungsspannung, MQTT-Übertragungsintervall) Alle grafischen UIFlow-Programme (Python-Code wird automatisch in Echtzeit generiert)
Ich habe Temperatur, Luftfeuchtigkeit und Druck mit dem "M5 Stick C" und "M5 Stick C ENV Hat (mit DHT12 / BMP280 / BMM150)" gemessen und die MQTT-Übertragung ausprobiert. Die Entwicklungsumgebung ist UIFlow V1.4.0-Beta. (UIFlow V1.3.2 scheint ENV Hat nicht zu unterstützen.) Der Python-Code wird in Echtzeit aus dem Grafikprogramm generiert und fühlt sich gut an.
48(W)×24(D)×14(H)mm 18.1 g Sie können eine Benutzeroberfläche mit drei Schaltern (einer ist der Netzschalter), einer LED, einem LCD-Farbdisplay usw. erstellen. Es hat auch eine eingebaute Knopfbatterie für die Echtzeituhr.
Es fühlt sich an, als könnte es nicht so verwendet werden, wie es ist. Es ist notwendig, Wege zu finden, um die Wärmeerzeugung zu unterdrücken.
UIFlow V1.4.0-Beta hatte die folgenden Probleme.
Es scheint möglich zu sein, das LCD-Bildschirmlayout und den Hardwarezugriff in einer grafischen Umgebung durchzuführen, dann die grafische Umgebung aufzugeben und nur mit Python-Code zu entwickeln.
Von https://docs.m5stack.com/#/ja/core/m5stickc
Von https://lang-ship.com/reference/unofficial/M5StickC/Tips/AXP192/
Von https://www.switch-science.com/catalog/5755/
--Taste A (Oberseite, M5-Markierung) LCD ein / aus, gedrückt halten, um MQTT zu senden
Das automatisch aus dem Grafikprogramm generierte Programm ist unten dargestellt. Seit der automatischen Generierung wurden keine Code-Ergänzungen oder Änderungen vorgenommen.
main.py
from m5stack import *
from m5ui import *
from uiflow import *
from m5mqtt import M5mqtt
import hat
setScreenColor(0x111111)
hat_env0 = hat.get(hat.ENV)
m5mqtt = M5mqtt('M5StickC', '192.168.11.2', 1883, '', '', 300)
label0 = M5TextBox(74, 5, "Text", lcd.FONT_DejaVu18,0xFFFFFF, rotate=90)
label1 = M5TextBox(50, 5, "Text", lcd.FONT_DejaVu18,0xFFFFFF, rotate=90)
label2 = M5TextBox(25, 5, "Text", lcd.FONT_DejaVu18,0xFFFFFF, rotate=90)
label4 = M5TextBox(50, 97, "Text", lcd.FONT_DejaVu18,0xFFFFFF, rotate=90)
label3 = M5TextBox(74, 97, "Text", lcd.FONT_DejaVu18,0xFFFFFF, rotate=90)
from numbers import Number
x = None
LcdOn = None
mqttIntervalMinIndex = None
blueOn = None
ID = None
LcdOffMin = None
mqttIntervalMin = None
mqttIntervalMinList = None
msg = None
tempList = None
humiList = None
presList = None
battList = None
temp = None
humi = None
pres = None
batt = None
def math_median(myList):
localList = sorted([e for e in myList if isinstance(e, Number)])
if not localList: return
if len(localList) % 2 == 0:
return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0
else:
return localList[(len(localList) - 1) // 2]
def setLcdTimer():
global x, LcdOn, mqttIntervalMinIndex, blueOn, ID, LcdOffMin, mqttIntervalMin, mqttIntervalMinList, msg, tempList, humiList, presList, battList, temp, humi, pres, batt
LcdOffMin = 3
timerSch.stop('timer1')
timerSch.run('timer1', (LcdOffMin * (1000 * 60)), 0x00)
def setMqttTimer(x):
global LcdOn, mqttIntervalMinIndex, blueOn, ID, LcdOffMin, mqttIntervalMin, mqttIntervalMinList, msg, tempList, humiList, presList, battList, temp, humi, pres, batt
timerSch.stop('timer2')
if x:
timerSch.run('timer2', (mqttIntervalMin * (1000 * 60)), 0x00)
def buttonA_wasReleased():
global LcdOn, mqttIntervalMinIndex, blueOn, ID, LcdOffMin, mqttIntervalMin, x, mqttIntervalMinList, msg, tempList, humiList, presList, battList, temp, humi, pres, batt
LcdOn = not LcdOn
if LcdOn:
axp.setLDO2Vol(3)
else:
axp.setLDO2Vol(0)
setLcdTimer()
pass
btnA.wasReleased(buttonA_wasReleased)
def buttonA_pressFor():
global LcdOn, mqttIntervalMinIndex, blueOn, ID, LcdOffMin, mqttIntervalMin, x, mqttIntervalMinList, msg, tempList, humiList, presList, battList, temp, humi, pres, batt
setMqttTimer(False)
ttimer2()
wait(3)
setMqttTimer(True)
setLcdTimer()
pass
btnA.pressFor(0.8, buttonA_pressFor)
def buttonB_wasReleased():
global LcdOn, mqttIntervalMinIndex, blueOn, ID, LcdOffMin, mqttIntervalMin, x, mqttIntervalMinList, msg, tempList, humiList, presList, battList, temp, humi, pres, batt
mqttIntervalMinIndex = 1 + mqttIntervalMinIndex
if mqttIntervalMinIndex >= 4:
mqttIntervalMinIndex = mqttIntervalMinIndex - 3
mqttIntervalMin = mqttIntervalMinList[int(mqttIntervalMinIndex - 1)]
label4.setText(str((str(mqttIntervalMin) + 'min')))
setMqttTimer(True)
setLcdTimer()
pass
btnB.wasReleased(buttonB_wasReleased)
def buttonB_pressFor():
global LcdOn, mqttIntervalMinIndex, blueOn, ID, LcdOffMin, mqttIntervalMin, x, mqttIntervalMinList, msg, tempList, humiList, presList, battList, temp, humi, pres, batt
blueOn = not blueOn
if blueOn:
setScreenColor(0x3366ff)
else:
setScreenColor(0xff0000)
axp.setLDO2Vol(3)
label0.setText('')
label1.setText('')
label2.setText('')
label3.setText('')
label4.setText('')
setLcdTimer()
pass
btnB.pressFor(0.8, buttonB_pressFor)
@timerSch.event('timer1')
def ttimer1():
global LcdOn, mqttIntervalMinIndex, blueOn, ID, LcdOffMin, mqttIntervalMin, x, mqttIntervalMinList, msg, tempList, humiList, presList, battList, temp, humi, pres, batt
axp.setLDO2Vol(0)
LcdOn = False
pass
@timerSch.event('timer2')
def ttimer2():
global LcdOn, mqttIntervalMinIndex, blueOn, ID, LcdOffMin, mqttIntervalMin, x, mqttIntervalMinList, msg, tempList, humiList, presList, battList, temp, humi, pres, batt
M5Led.on()
msg = temp + ' ,' + humi + ',' + pres + ',' + batt
m5mqtt.publish(str('M5StickC'),str(((ID + ((',' + msg))))))
wait(0.001)
M5Led.off()
pass
ID = 'I5001'
m5mqtt.start()
LcdOn = True
axp.setLDO2Vol(3)
blueOn = True
setScreenColor(0x3366ff)
setLcdTimer()
mqttIntervalMinIndex = 3
mqttIntervalMinList = [1, 3, 30]
mqttIntervalMin = mqttIntervalMinList[int(mqttIntervalMinIndex - 1)]
setMqttTimer(True)
while True:
M5Led.on()
wait(0.0007)
M5Led.off()
tempList = []
humiList = []
presList = []
battList = []
for count in range(5):
tempList.append(int(((hat_env0.temperature) * 100)))
humiList.append(int(((hat_env0.humidity) * 100)))
presList.append(int(((hat_env0.pressure) * 100)))
battList.append(int(((axp.getBatVolt()) * 100)))
wait(0.2)
temp = (("%.2f"%((math_median(tempList) / 100))) + 'C')
humi = (("%.2f"%((math_median(humiList) / 100))) + 'pct')
pres = (("%.2f"%((math_median(presList) / 100))) + 'hPa')
batt = (("%.2f"%((math_median(battList) / 100))) + 'V')
label0.setText(str(temp))
label1.setText(str(humi))
label2.setText(str(pres))
label3.setText(str(batt))
label4.setText(str((str(mqttIntervalMin) + 'min')))
wait_ms(2)
M5StickC Schnellstart-UIFlow https://docs.m5stack.com/#/ja/quick_start/m5stickc/m5stickc_quick_start_with_uiflow
M5StickC (M5Stack Docs) https://docs.m5stack.com/#/ja/core/m5stickc https://docs.m5stack.com/#/en/uiflow/hardware
m5stack/M5StickC https://github.com/m5stack/M5StickC
Versuchen Sie es mit dem Dachlabor M5Stack http://itoi.jp/M5Stack.html
Übersicht über die inoffizielle japanische Referenz AXP192 von M5StickC https://lang-ship.com/reference/unofficial/M5StickC/Tips/AXP192/
Ich habe die zusätzliche Funktion AXP192 von M5StickC 0.0.7 untersucht https://lang-ship.com/blog/?p=696#_LightSleep
M5Stick C Ich habe vorerst versucht, es zu zerlegen https://twitter.com/Ghz2000/status/1125058416014176263
BeetleC ist angekommen http://gijin77.blog.jp/archives/20843205.html
Verschieben Sie das 3D-Modell von M5Stack auf Ihrem Computer entsprechend der Bewegung von M5Stack http://pages.switch-science.com/letsiot/rotateM5Stack/
[Dies] Ich ging zum M5Stack-Hauptquartier, auf das die Macher der Welt achten![Ich kann nicht gewinnen] https://wirelesswire.jp/2019/08/71960/
Adafruit M5Stick-C Pico Mini IoT Development Board https://www.adafruit.com/product/4290
Recommended Posts