Affichage à l'écran (température, humidité, pression, tension d'alimentation, intervalle de transmission MQTT) Tous les programmes graphiques UIFlow (le code Python est automatiquement généré en temps réel)
J'ai mesuré la température, l'humidité et la pression avec "M5 Stick C" et "M5 Stick C ENV Hat (avec DHT12 / BMP280 / BMM150)" et j'ai essayé la transmission MQTT. L'environnement de développement est UIFlow V1.4.0-Beta. (UIFlow V1.3.2 ne semble pas prendre en charge ENV Hat.) Le code Python est généré en temps réel à partir du programme graphique et ça fait du bien.
48(W)×24(D)×14(H)mm 18.1 g Vous pouvez créer une interface utilisateur avec trois commutateurs (l'un est le bouton d'alimentation), LED, écran couleur LCD, etc. Il dispose également d'une pile bouton intégrée pour une horloge en temps réel.
On a l'impression qu'il ne peut pas être utilisé tel quel. Il est nécessaire de concevoir des moyens de supprimer la génération de chaleur.
UIFlow V1.4.0-Beta a rencontré les problèmes suivants.
--Si vous entrez '%' dans la chaîne de caractères, ce sera '%' côté python.
Il semble possible de faire la mise en page de l'écran LCD et l'accès au matériel dans un environnement graphique, puis d'abandonner l'environnement graphique et de développer avec uniquement du code Python.
Sur https://docs.m5stack.com/#/ja/core/m5stickc
De https://lang-ship.com/reference/unofficial/M5StickC/Tips/AXP192/
Depuis https://www.switch-science.com/catalog/5755/
--Température, humidité, pression
--Bouton A (surface supérieure, marque M5) LCD marche / arrêt, appuyez et maintenez pour envoyer MQTT --Bouton B (côté) Sélection de la minuterie de transmission MQTT (1/3/30 minutes), appui long pour changer la couleur de fond (bleu / rouge)
Le programme généré automatiquement à partir du programme graphique est illustré ci-dessous. Aucun ajout ou modification de code n'a été effectué depuis la génération automatique.
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 Quick Start-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
Essayez d'utiliser le laboratoire de toiture M5Stack http://itoi.jp/M5Stack.html
Enquête sur la référence japonaise non officielle M5StickC AXP192 https://lang-ship.com/reference/unofficial/M5StickC/Tips/AXP192/
J'ai examiné la fonction supplémentaire AXP192 de M5StickC 0.0.7 https://lang-ship.com/blog/?p=696#_LightSleep
M5Stick C J'ai essayé de démonter pour le moment https://twitter.com/Ghz2000/status/1125058416014176263
BeetleC est arrivé http://gijin77.blog.jp/archives/20843205.html
Déplacez le modèle 3D de M5Stack sur votre ordinateur en fonction du mouvement de M5Stack http://pages.switch-science.com/letsiot/rotateM5Stack/
[Ceci] Je suis allé au siège de M5Stack, qui attire l'attention des créateurs du monde![Je ne peux pas gagner] https://wirelesswire.jp/2019/08/71960/
Adafruit M5Stick-C Pico Mini IoT Development Board https://www.adafruit.com/product/4290