Einführung in M5StickC (Temperatur- / Feuchtigkeitsmessung und MQTT-Übertragung, UIFlow Python)

image.png

Bildschirmanzeige (Temperatur, Luftfeuchtigkeit, Druck, Versorgungsspannung, MQTT-Übertragungsintervall) image.png Alle grafischen UIFlow-Programme (Python-Code wird automatisch in Echtzeit generiert)

Einführung

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.

M5StickC ist klein und gut.

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.

ENV Hat wird von der vom M5StickC-Hauptgerät erzeugten Wärme beeinflusst und die Temperatur steigt an.

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.

Es macht Spaß, den Blockbildschirm der UIFlow-IDE grafisch zu programmieren.

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.

Hardware-

M5StickC Körper

image.png Von https://docs.m5stack.com/#/ja/core/m5stickc

M5StickC Energieverwaltung

image.png

Von https://lang-ship.com/reference/unofficial/M5StickC/Tips/AXP192/

M5StickC ENV Hat (mit DHT12 / BMP280 / BMM150)

image.png

Von https://www.switch-science.com/catalog/5755/

Programmspezifikationen

Informationen zur Anzeige auf dem LCD-Bildschirm

LED-Beleuchtung

MQTT-Übertragungsdaten (Grafikerstellung und Datenanzeige auf der PC-Seite)

image.png

Grafikprogramm (Blockbildschirm)

Initialisierung (MQTT, Bildschirm, Timer) und Hauptschleife (LED-Herzschlag, Sensorleseschleife, Medianwertberechnung, LCD-Anzeige)

image.png

Bearbeitung der Tasten A und B.

--Taste A (Oberseite, M5-Markierung) LCD ein / aus, gedrückt halten, um MQTT zu senden

image.png

Bildschirmschoner-Timer 1

image.png

MQTT-Übertragungstimer 2

image.png

Python-Programm (automatisch generiertes Programm)

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)

Verwandte Informationen

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

Einführung in M5StickC (Temperatur- / Feuchtigkeitsmessung und MQTT-Übertragung, UIFlow Python)
Einfache Einführung in die Python3-Serie und OpenCV3
Einführung von Python
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
Einfache FPS-Messung von Python
Quellinstallation und Installation von Python
Einführung und Tipps von mlflow.Tracking
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
[Einführung in die Udemy Python3 + -Anwendung] 69. Import des absoluten Pfads und des relativen Pfads
[Einführung in die Udemy Python3 + -Anwendung] 12. Indizieren und Schneiden von Zeichenketten
[Einführung in Data Scientists] Grundlagen von Python ♬ Bedingte Verzweigung und Schleifen
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und anonyme Funktionen usw.
Die Geschichte von Python und die Geschichte von NaN
Installation von SciPy und matplotlib (Python)
[Einführung in Python3 Tag 1] Programmierung und Python
Einführung und Implementierung der Aktivierungsfunktion
Hadoop-Einführung und MapReduce mit Python
Dies und das von Python-Eigenschaften
Einführung des Python-Zeichenpakets Pygal
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Aufzeichnung der Python-Einführung für Neulinge
Zusammenfassung der Python-Indizes und -Slices
Reputation von Python-Büchern und Nachschlagewerken
Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (2) Herstellung eines Übertragungsgeräts