diff --git a/I2CDEVICES.md b/I2CDEVICES.md index 0841866c9..90be957ef 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -105,3 +105,4 @@ Index | Define | Driver | Device | Address(es) | Description 68 | USE_HYT | xsns_97 | HYTxxx | 0x28 | Temperature and Humidity sensor 69 | USE_SGP40 | xsns_98 | SGP40 | 0x59 | Gas (TVOC) and air quality 70 | USE_LUXV30B | xsns_99 | LUXV30B | 0x4A | DFRobot SEN0390 V30B lux sensor + 71 | USE_QMC5883L | xsns_33 | QMC5883L | 0x0D | Magnetic Field Sensor diff --git a/tasmota/include/i18n.h b/tasmota/include/i18n.h index 669e22e14..900a28c61 100644 --- a/tasmota/include/i18n.h +++ b/tasmota/include/i18n.h @@ -233,7 +233,10 @@ #define D_JSON_SIGNALSTRENGTH "SignalStrength" #define D_JSON_CHIPTEMPERATURE "ChipTemperature" #define D_JSON_RAW "Raw" - +#define D_JSON_MX "XaxisInduction" +#define D_JSON_MY "YaxisInduction" +#define D_JSON_MZ "ZaxisInduction" +#define D_JSON_MAGNETICFLD "MagneticInduction" #define D_RSLT_ENERGY "ENERGY" #define D_RSLT_HASS_STATE "HASS_STATE" #define D_RSLT_INFO "INFO" diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 1ea5eb210..872fdd600 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Verwyder gewig" #define D_HX_CAL_REFERENCE "Laai verwysingsgewig" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index 7b97a7f56..ac678f79c 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Жироскоп - ос Y" #define D_GZ_AXIS "Жироскоп - ос Z" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Премахване на тегло" #define D_HX_CAL_REFERENCE "Поставяне на еталонна тежест" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h index cf8cd8244..cae18ab4c 100644 --- a/tasmota/language/ca_AD.h +++ b/tasmota/language/ca_AD.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Treu el pes" #define D_HX_CAL_REFERENCE "Posa el pes de referència" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 9576c1029..db0d3cdcd 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro osa-Y" #define D_GZ_AXIS "Gyro osa-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Odstraňte zátěž" #define D_HX_CAL_REFERENCE "Vložte referenční zátěž" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index fb08ffa19..e928d187b 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyroskop Y-Achse" #define D_GZ_AXIS "Gyroskop Z-Achse" +// xsns_33_QMC5883L.ino +#define D_MX "Magnetfeld X-Achse" +#define D_MY "Magnetfeld Y-Achse" +#define D_MZ "Magnetfeld Z-Achse" +#define D_MAGNETICFLD "Magnetfeldstärke" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Wägegut entfernen" #define D_HX_CAL_REFERENCE "Referenzgewicht auflegen" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 55da887d6..fc44b2db8 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Απομακρύνετε το βαρίδιο" #define D_HX_CAL_REFERENCE "Τοποθετήστε το βαρίδιο αναφοράς" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index ff0ea4b33..5b53d2a39 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remove weight" #define D_HX_CAL_REFERENCE "Load reference weight" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 32a502308..5764e5eab 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Girós. Eje Y" #define D_GZ_AXIS "Girós. Eje Z" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remover Peso" #define D_HX_CAL_REFERENCE "Poner Peso de Referencia" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 6a003f0b4..24c023ece 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Axe-Y" #define D_GZ_AXIS "Gyro Axe-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Retirer la charge" #define D_HX_CAL_REFERENCE "Charger l'étalon de poids" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index c74008122..5ded5fe46 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-as" #define D_GZ_AXIS "Gyro Z-as" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Gewicht fuortsmite" #define D_HX_CAL_REFERENCE "Pleats kalibraasje gewicht" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index bc59a86c1..d8850c46d 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "הסר משקל" #define D_HX_CAL_REFERENCE "טען משקל התייחסות" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index fc4cd8bc4..222551d67 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Giroszkóp Y-tengely" #define D_GZ_AXIS "Giroszkóp Z-tengely" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Távolítsa el a súlyt" #define D_HX_CAL_REFERENCE "Helyezze fel a referenciasúlyt" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 7025133df..a72e3b202 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Giroscopio asse Y" #define D_GZ_AXIS "Giroscopio asse Z" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Rimuovi peso" #define D_HX_CAL_REFERENCE "Carica riferimento peso" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index a4d894717..6adb57fde 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "중량 제거" #define D_HX_CAL_REFERENCE "참조 중량 로드" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "마이크로미터" #define D_UNIT_MICROSECOND "마이크로초" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 22e7a2370..80dd3d628 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-as" #define D_GZ_AXIS "Gyro Z-as" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Verwijder gewicht" #define D_HX_CAL_REFERENCE "Plaats ijkgewicht" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index ffa0b8b54..d626c5696 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Odchylenie Oś-Y" #define D_GZ_AXIS "Odchylenie Oś-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Usuń wagę" #define D_HX_CAL_REFERENCE "Załaduj wagę referencyjną" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 151251bd7..a1f57b5a0 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Giro Eixo-Y" #define D_GZ_AXIS "Giro Eixo-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remover calibragem" #define D_HX_CAL_REFERENCE "Peso de referência de carga" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 049c92d00..f4fa7c1a1 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remover peso" #define D_HX_CAL_REFERENCE "Carregar peso de referência" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index cc3b1827a..7a339c64c 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Axa-Y" #define D_GZ_AXIS "Gyro Axa-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Elimină greutatea" #define D_HX_CAL_REFERENCE "Așează greutatea de referință" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index af69426e8..3a74b9bd6 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remove weight" #define D_HX_CAL_REFERENCE "Load reference weight" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "мкм" #define D_UNIT_MICROSECOND "мкс" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "мА" #define D_UNIT_MILLILITERS "мл" #define D_UNIT_MILLIMETER "мм" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 6852ae1ae..157e025dc 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro os-Y" #define D_GZ_AXIS "Gyro os-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Odstráňte záťaž" #define D_HX_CAL_REFERENCE "Vložte referenčnú záťaž" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 000b756cf..c18b439e4 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axel" #define D_GZ_AXIS "Gyro Z-Axel" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Ta bort vikter" #define D_HX_CAL_REFERENCE "Ladda referensvikt" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index 6225ed5f6..1127712f5 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remove weight" #define D_HX_CAL_REFERENCE "Load reference weight" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 04075423d..00cb7d80e 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Орієнт Вісь-Y" #define D_GZ_AXIS "Орієнт Вісь-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remove weight" #define D_HX_CAL_REFERENCE "Load reference weight" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µм" #define D_UNIT_MICROSECOND "µС" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "мА" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "мм" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index 4555a4777..9b6dc96be 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remove weight" #define D_HX_CAL_REFERENCE "Load reference weight" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 1e06ddcb8..44bf0cc12 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "绕Y轴旋转的角速度" #define D_GZ_AXIS "绕Z轴旋转的角速度" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "去除重量" #define D_HX_CAL_REFERENCE "加载参考重量" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "mA" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index 796cb0c38..c3798aa71 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -566,6 +566,12 @@ #define D_GY_AXIS "陀螺儀 Y-軸" #define D_GZ_AXIS "陀螺儀 Z-軸" +// xsns_33_QMC5883L.ino +#define D_MX "Induction X-Axis" +#define D_MY "Induction Y-Axis" +#define D_MZ "Induction Z-Axis" +#define D_MAGNETICFLD "Magnetic Induction" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "移除重量" #define D_HX_CAL_REFERENCE "載入參考重量" @@ -914,6 +920,7 @@ #define D_UNIT_MICROMETER "微米" #define D_UNIT_MICROSECOND "微秒" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "µT" #define D_UNIT_MILLIAMPERE "毫安培" #define D_UNIT_MILLILITERS "ml" #define D_UNIT_MILLIMETER "mm" diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index bac7413c2..77e301cd6 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -715,6 +715,8 @@ // Reference: https://cdn-learn.adafruit.com/downloads/pdf/adafruit-led-backpack.pdf // #define SEVENSEG_ADDRESS1 0x70 // No longer used. Use MTX_ADDRESS1 - MTX_ADDRESS8 instead to specify I2C address of sevenseg displays // #define USE_DISPLAY_SH1106 // [DisplayModel 7] [I2cDriver6] Enable SH1106 Oled 128x64 display (I2C addresses 0x3C and 0x3D) +// #define USE_QMC5883L // USE_QMC5883L magnetic induction sensor, (I2C address 0x0D) +// #define QMC5883L_TEMP_SHIFT 23 // sensor temperature are not calibrated (only relativ measurement) and need an absolute ground value in °C (see datasheet) #endif // USE_I2C diff --git a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino new file mode 100644 index 000000000..1122a389f --- /dev/null +++ b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino @@ -0,0 +1,328 @@ +/* + xsns_99_qmc5883l.ino - QMC5883L 3-Axis Digital Compass sensor support for Tasmota + + Copyright (C) 2022 Helge Scheunemann + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + DATASHEET + + The QMC5883L is a multi-chip three-axis magnetic sensor. This + surface -mount, small sized chip has integrated magnetic sensors with + signal condition ASIC, targeted for high precision applications such as + compassing, navigation and gaming in drone, robot, mobile and + personal hand-held devices. + The QMC5883L is based on our state-of-the-art, high resolution, + magneto-resistive technology licensed from Honeywell AMR technology. + Along with custom-designed 16-bit ADC ASIC, it offers the advantages of + low noise, high accuracy, low power consumption, offset cancellation and + temperature compensation. QMC5883L enables 1° to 2° compass + heading accuracy. The I²C serial bus allows for easy interface + + 9.1 Register Map + The table below provides a list of the 8-bit registers embedded in the device and their respective function and + addresses + + Table 13. Register Map + Addr. 7 6 5 4 3 2 1 0 Access + 00H Data Output X LSB Register XOUT[7:0] Read only + 01H Data Output X MSB Register XOUT[15:8] Read only + 02H Data Output Y LSB Register YOUT[7:0] Read only + 03H Data Output Y MSB Register YOUT[15:8] Read only + 04H Data Output Z LSB Register ZOUT[7:0] Read only + 05H Data Output Z MSB Register ZOUT[15:8] Read only + 06H DOR OVL DRDY Read only + 07H TOUT[7:0] Read only + 08H TOUT[15:8] Read only + 09H OSR[1:0] RNG[1:0] ODR[1:0] MODE[1:0] Read/Write + 0AH SOFT_RST ROL_P NT INT_E NB R/W, Read only on blanks + 0BH SET/RESET Period FBR [7:0] Read/Write + 0CH Reserved Read only + 0DH Reserved Read only + + 9.2 Register Definition + 9.2.1 Output Data Register + Registers 00H ~ 05H store the measurement data from each axis magnetic sensor in continuous-measurement. + In the continuous measurement mode, the output data is refreshed periodically based on the data update rate + ODR setup in control registers 1. The data stays the same, regardless of reading status through I2C, until new + data replaces them. Each axis has 16 bit data width in 2’s complement, i.e., MSB of 01H/03H/05H indicates the + sign of each axis. The output data of each channel saturates at -32768 and 32767. + + Table 14. Output Data Register + Addr. 7 6 5 4 3 2 1 0 + 00H Data Output X LSB Register XOUT[7:0] + 01H Data Output X MSB Register XOUT[15:8] + 02H Data Output Y LSB Register YOUT[7:0] + 03H Data Output Y MSB Register YOUT[15:8] + 04H Data Output Z LSB Register ZOUT[7:0] + 05H Data Output Z MSB Register ZOUT[15:8] + + 9.2.2 Status Register + There are two status registers located in address 06H and 0CH. + Register 06H has three bits indicating for status flags, the rest are reserved for factory use. The status registers + are read only bits. + + Table 15. Status Register 1 + Addr. 7 6 5 4 3 2 1 0 + 06H DOR OVL DRDY + + Data Ready Register (DRDY), it is set when all three axis data is ready, and loaded to the output data registers in + the continuous measurement mode. It is reset to “0” by reading any data register (00H~05H) through I2C + commends + DRDY: “0”: no new data, “1”: new data is ready + Overflow flag (OVL) is set to “1” if any data of three axis magnetic sensor channels is out of range. The output + data of each axis saturates at -32768 and 32767, if any of the axis exceeds this range, OVL flag is set to “1”. This + flag is reset to “0” if next measurement goes back to the range of (-32768, 32767), otherwise, it keeps as “1”. + OVL: “0”: normal, “1”: data overflow + Data Skip (DOR) bit is set to “1” if all the channels of output data registers are skipped in reading in the + continuous-measurement mode. It is reset to “0” by reading any data register (00H~05H) through I2C + DOR: “0”: normal, “1”: data skipped for reading + + 9.2.3 Temperature Data Registers + Registers 07H-08H store temperature sensor output data. 16 bits temperature sensor output is in 2’s complement. + Temperature sensor gain is factory-calibrated, but its offset has not been compensated, only relative temperature + value is accurate. The temperature coefficient is about 100 LSB/℃ + + Table 17. Temperature Sensor Output + Addr. 7 6 5 4 3 2 1 0 + 07H TOUT[7:0] + 08H TOUT[15:8] + + 9.2.4 Control Registers + Two 8-bits registers are used to control the device configurations. + Control register 1 is located in address 09H, it sets the operational modes (MODE). output data update rate + (ODR), magnetic field measurement range or sensitivity of the sensors (RNG) and over sampling rate (OSR). + Control register 2 is located in address 0AH. It controls Interrupt Pin enabling (INT_ENB), Point roll over function + enabling(POL_PNT) and soft reset (SOFT_RST). + Two bits of MODE registers can transfer mode of operations in the device, the two modes are Standby, and + Continuous measurements. The default mode after Power-on-Reset (POR) is standby. There is no any restriction + in the transferring between the modes. + Output data rate is controlled by ODR registers. Four data update frequencies can be selected: 10Hz, 50Hz, + 100Hz and 200Hz. For most of compassing applications, we recommend 10 Hz for low power consumption. For + gaming, the high update rate such as 100Hz or 200Hz can be used. + Field ranges of the magnetic sensor can be selected through the register RNG. The full scale field range is + determined by the application environments. For magnetic clear environment, low field range such as +/- 2gauss + can be used. The field range goes hand in hand with the sensitivity of the magnetic sensor. The lowest field range + has the highest sensitivity, therefore, higher resolution. + Over sample Rate (OSR) registers are used to control bandwidth of an internal digital filter. Larger OSR value + leads to smaller filter bandwidth, less in-band noise and higher power consumption. It could be used to reach a + good balance between noise and power. Four over sample ratio can be selected, 64, 128, 256 or 512. + + Table 18. Control Register 1 + Addr 7 6 5 4 3 2 1 0 + 09H OSR[1:0] RNG[1:0] ODR[1:0] MODE[1:0] + + Reg. Definition 00 01 10 11 + Mode Mode Control Standby Continuous Reserve Reserve + ODR Output Data Rate 10Hz 50Hz 100Hz 200Hz + RNG Full Scale 2G 8G Reserve Reserve + OSR Over Sample Ratio 512 256 128 64 + + Interrupt enabling is controlled by register INT_ENB in control register 2. Once the interrupt is enabled, it will flag + when new data is in Data Output Registers. + INT_ENB: “0”: enable interrupt PIN, “1”: disable interrupt PIN + Pointer roll-over function is controlled by ROL_PNT register. When the point roll-over function is enabled, the I2C + data pointer automatically rolls between 00H ~ 06H, if I2C read begins at any address among 00H~06H. + ROL_PNT: “0”: Normal, “1”: Enable pointer roll-over function + Soft Reset can be done by changing the register SOFT_RST to set. Soft reset can be invoked at any time of any + mode. For example, if soft reset occurs at the middle of continuous mode reading, QMC5883L immediately + switches to standby mode due to mode register is reset to “00” in default. + SOFT_RST: “0”: Normal“1”: Soft reset, restore default value of all registers. + Table 19. Control Register 2 + Addr. 7 6 5 4 3 2 1 0 + 0AH SOFT_RST ROL_PNT INT_ENB + + 9.2.5 SET/RESET Period Register + SET/RESET Period is controlled by FBR [7:0], it is recommended that the register 0BH is written by 0x01. + + Table 20. SET/RESET Period Register + Addr. 7 6 5 4 3 2 1 0 + 0BH SET/RESET Perio [7:0] + +*/ + +#ifdef USE_I2C +#ifdef USE_QMC5883L + +/*********************************************************************************************\ + * QMC5883L is 3-Axis Digital Compass sensor + * + * Source: Helge Scheunemann + * + * I2C Address: 0x0D +\*********************************************************************************************/ + +// Define driver ID +#define XSNS_33 33 +#define XI2C_71 71 // See I2CDEVICES.md + +/* The default I2C address of this chip */ +#define QMC5883L_ADDR 0x0D + +/* Register numbers */ +#define QMC5883L_X_LSB 0x00 +#define QMC5883L_X_MSB 0x01 +#define QMC5883L_Y_LSB 0x02 +#define QMC5883L_Y_MSB 0x03 +#define QMC5883L_Z_LSB 0x04 +#define QMC5883L_Z_MSB 0x05 +#define QMC5883L_STATUS 0x06 +#define QMC5883L_TEMP_LSB 0x07 +#define QMC5883L_TEMP_MSB 0x08 +#define QMC5883L_CONFIG 0x09 +#define QMC5883L_CONFIG2 0x0a +#define QMC5883L_RESET 0x0b +#define QMC5883L_RESERVED 0x0c +#define QMC5883L_CHIP_ID 0x0d + +/* Bit values for the STATUS register */ +#define QMC5883L_STATUS_DRDY 1 +#define QMC5883L_STATUS_OVL 2 +#define QMC5883L_STATUS_DOR 4 + +/* Oversampling values for the CONFIG register */ +#define QMC5883L_CONFIG_OS512 0b00000000 +#define QMC5883L_CONFIG_OS256 0b01000000 +#define QMC5883L_CONFIG_OS128 0b10000000 +#define QMC5883L_CONFIG_OS64 0b11000000 + +/* Range values for the CONFIG register */ +#define QMC5883L_CONFIG_2GAUSS 0b00000000 +#define QMC5883L_CONFIG_8GAUSS 0b00010000 + +/* Rate values for the CONFIG register */ +#define QMC5883L_CONFIG_10HZ 0b00000000 +#define QMC5883L_CONFIG_50HZ 0b00000100 +#define QMC5883L_CONFIG_100HZ 0b00001000 +#define QMC5883L_CONFIG_200HZ 0b00001100 + +/* Mode values for the CONFIG register */ +#define QMC5883L_CONFIG_STANDBY 0b00000000 +#define QMC5883L_CONFIG_CONT 0b00000001 + +/* Mode values for the CONFIG2 register */ +#define QMC5883L_CONFIG2_RESET 0b10000000 + + // data field +struct QMC5883L_s +{ + int16_t MX, MY, MZ; + int16_t temp; + uint16_t scalar; +} *QMC5883L = nullptr; + + +// Initialise the device +void QMC5883L_Init() +{ + if (!I2cSetDevice(QMC5883L_ADDR)) + { + return; + } + I2cSetActiveFound(QMC5883L_ADDR, "QMC5883L"); + // reset QMC5883L + if (I2cWrite8(QMC5883L_ADDR, QMC5883L_CONFIG2, QMC5883L_CONFIG2_RESET) == false) + return; // Software Reset + if (I2cWrite8(QMC5883L_ADDR, QMC5883L_RESET, 0x01) == false) + return; + // write config + if (I2cWrite8(QMC5883L_ADDR, QMC5883L_CONFIG, QMC5883L_CONFIG_OS256 | QMC5883L_CONFIG_8GAUSS | QMC5883L_CONFIG_100HZ | QMC5883L_CONFIG_CONT) == false) + return; + QMC5883L = (QMC5883L_s *)calloc(1, sizeof(struct QMC5883L_s)); +} + +//Read the magnetic data +void QMC5883L_read_data(void) +{ + // check if chip is ready to provice data + if (!(I2cRead8(QMC5883L_ADDR, QMC5883L_STATUS) & QMC5883L_STATUS_DRDY)) + return; // chip not yet ready, next round try again + + QMC5883L->MX = I2cReadS16_LE(QMC5883L_ADDR, QMC5883L_X_LSB); // select LSB register + QMC5883L->MY = I2cReadS16_LE(QMC5883L_ADDR, QMC5883L_Y_LSB); + QMC5883L->MZ = I2cReadS16_LE(QMC5883L_ADDR, QMC5883L_Z_LSB); + + // calculate scalar magnetic induction + QMC5883L->scalar = sqrt((QMC5883L->MX * QMC5883L->MX) + (QMC5883L->MY * QMC5883L->MY) + (QMC5883L->MZ * QMC5883L->MZ)); + + // get temperature + QMC5883L->temp = (I2cReadS16_LE(QMC5883L_ADDR, QMC5883L_TEMP_LSB) / 100) + QMC5883L_TEMP_SHIFT; +} + +/*********************************************************************************************\ + * Presentation +\*********************************************************************************************/ + +#ifdef USE_WEBSERVER +const char HTTP_SNS_QMC5883L[] PROGMEM = + "{s}QMC5883L " D_MX "{m}%d " D_UNIT_MICROTESLA "{e}" // {s} = , {m} = , {e} = + "{s}QMC5883L " D_MY "{m}%d " D_UNIT_MICROTESLA "{e}" // {s} = , {m} = , {e} = + "{s}QMC5883L " D_MZ "{m}%d " D_UNIT_MICROTESLA "{e}" // {s} = , {m} = , {e} = + "{s}QMC5883L " D_MAGNETICFLD "{m}%d " D_UNIT_MICROTESLA "{e}" // {s} = , {m} = , {e} = + "{s}QMC5883L " D_TEMPERATURE "{m}%d " D_UNIT_DEGREE D_UNIT_CELSIUS "{e}"; // {s} = , {m} = , {e} = + +const char HTTP_SNS_QMC5883L_ERROR[] PROGMEM = + "{s}QMC5883L {m} %s {e}"; +#endif + + +void QMC5883L_Show(uint8_t json) +{ + if (json) + { + ResponseAppend_P(PSTR(",\"QMC5883L\":{\"" D_JSON_MX "\":%d,\"" D_JSON_MY "\":%d,\"" D_JSON_MZ "\":%d,\"" D_JSON_MAGNETICFLD "\":%u,\"" D_JSON_TEMPERATURE "\":%d}"), QMC5883L->MX, QMC5883L->MY, QMC5883L->MZ, QMC5883L->scalar, QMC5883L->temp); + } +#ifdef USE_WEBSERVER + else + { + WSContentSend_PD(HTTP_SNS_QMC5883L, QMC5883L->MX, QMC5883L->MY, QMC5883L->MZ, QMC5883L->scalar, QMC5883L->temp); + } +#endif +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xsns33(byte function) +{ + if (!I2cEnabled(XI2C_71)) + { + return false; + } + if (FUNC_INIT == function) + { + QMC5883L_Init(); + } + else if (QMC5883L != nullptr) + { + switch (function) + { + case FUNC_JSON_APPEND: + QMC5883L_Show(1); + break; + case FUNC_EVERY_SECOND: + QMC5883L_read_data(); + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_SENSOR: + QMC5883L_Show(0); + break; +#endif // USE_WEBSERVER + } + } + return true; +} +#endif // USE_QMC5883L +#endif // USE_I2C \ No newline at end of file