From c15d974b44d76c5109f6bd4fe7015c52701a0a6c Mon Sep 17 00:00:00 2001 From: Helge Date: Sun, 2 Oct 2022 21:41:51 +0200 Subject: [PATCH 01/16] add new driver to support qmc5883L --- I2CDEVICES.md | 1 + tasmota/include/i18n.h | 5 + tasmota/language/de_DE.h | 8 + tasmota/language/en_GB.h | 8 + tasmota/my_user_config.h | 2 + .../tasmota_xsns_sensor/xsns_33_qmc5883l.ino | 394 ++++++++++++++++++ 6 files changed, 418 insertions(+) create mode 100644 tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino 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 c303d49b3..380913bfb 100644 --- a/tasmota/include/i18n.h +++ b/tasmota/include/i18n.h @@ -233,6 +233,11 @@ #define D_JSON_SIGNALSTRENGTH "SignalStrength" #define D_JSON_CHIPTEMPERATURE "ChipTemperature" #define D_JSON_RAW "Raw" +#define D_JSON_MX "Compass X-Axis" +#define D_JSON_MY "Compass Y-Axis" +#define D_JSON_MZ "Compass Z-Axis" +#define D_JSON_HEADING "Compass Heading" +#define D_JSON_MAGNETICFLD "Magnetic Induction" #define D_RSLT_ENERGY "ENERGY" #define D_RSLT_HASS_STATE "HASS_STATE" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index e9a9f6609..7f07b5a08 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyroskop Y-Achse" #define D_GZ_AXIS "Gyroskop Z-Achse" +// xsns_33_QMC5883L.ino +#define D_MX "Kompass X-Achse" +#define D_MY "Kompass Y-Achse" +#define D_MZ "Kompass Z-Achse" +#define D_HG "Kompass Richtung" +#define D_MAGNETICFLD "Magnet Feld Stärke" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Wägegut entfernen" #define D_HX_CAL_REFERENCE "Referenzgewicht auflegen" @@ -911,6 +918,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "uT" #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 60b9e8942..90b9b6ade 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remove weight" #define D_HX_CAL_REFERENCE "Load reference weight" @@ -911,6 +918,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" +#define D_UNIT_MICROTESLA "uT" #define D_UNIT_MILLIAMPERE "mA" #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..a31228cf0 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_ // have a compass sensor + #define USE_QMC5883L_Temp 22 // compass sensor temperatur 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..be66649e3 --- /dev/null +++ b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino @@ -0,0 +1,394 @@ +/* + 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 + +/* Apparently M_PI isn't available in all environments. */ +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288 +#endif + +// data field +struct { +int16_t MX = 0, MY = 0, MZ = 0, HG = 0; +int16_t xhigh = 0, yhigh = 0, xlow = 0, ylow = 0; +int16_t temp = 0; +uint16_t scalar = 0; +uint8_t status; +bool ready = false; +uint8_t i2c_address = QMC5883L_ADDR; +} QMC5883L; + +void writeRegister(uint8_t reg, uint8_t val) +{ + Wire.beginTransmission(QMC5883L.i2c_address); // start talking + Wire.write(reg); + Wire.write(val); + Wire.endTransmission(); +} + +int readRegister(uint8_t reg, uint8_t count) +{ + Wire.beginTransmission(QMC5883L.i2c_address); + Wire.write(reg); + Wire.endTransmission(); + + Wire.requestFrom(QMC5883L.i2c_address, count); + int n = Wire.available(); + if (n != count) return 0; + return n; +} + +// Initialise the device +void QMC5883L_Init() +{ + if (!I2cSetDevice(QMC5883L.i2c_address)) { return; } + I2cSetActiveFound(QMC5883L.i2c_address, "QMC5883L"); + // reset QMC5883L + writeRegister(QMC5883L_CONFIG2,QMC5883L_CONFIG2_RESET); // Software Reset + writeRegister(QMC5883L_RESET, 0x01); + // write config + writeRegister(QMC5883L_CONFIG, QMC5883L_CONFIG_OS256 | QMC5883L_CONFIG_8GAUSS | QMC5883L_CONFIG_10HZ | QMC5883L_CONFIG_CONT); + QMC5883L.ready = true; +} + +//Read the magnetic data +void QMC5883L_read_data(void) +{ + if(!QMC5883L.ready) return; + + // check if chip is ready to provice data + if (!readRegister(QMC5883L_STATUS, 1)) return; // read error + if (!(Wire.read() & QMC5883L_STATUS_DRDY)) return; // chip not yet ready, next round try again + + // QMC5883 reading data + if (readRegister(QMC5883L_X_LSB, 6) != 6) return; // read error, select LSB register + QMC5883L.MX = Wire.read() | (Wire.read() << 8); + QMC5883L.MY = Wire.read() | (Wire.read() << 8); + QMC5883L.MZ = Wire.read() | (Wire.read() << 8); + + int16_t x = QMC5883L.MX; + int16_t y = QMC5883L.MY; + + // calculate azimut, heading + if(x < QMC5883L.xlow) QMC5883L.xlow = x; + if(x > QMC5883L.xhigh) QMC5883L.xhigh = x; + if(y < QMC5883L.ylow) QMC5883L.ylow = y; + if(y > QMC5883L.yhigh) QMC5883L.yhigh = y; + + /* Bail out if not enough data is available. */ + if( QMC5883L.xlow == QMC5883L.xhigh || QMC5883L.ylow == QMC5883L.yhigh ) return; + /* Recenter the measurement by subtracting the average */ + x -= (QMC5883L.xhigh + QMC5883L.xlow) / 2; + y -= (QMC5883L.yhigh + QMC5883L.ylow) / 2; + /* Rescale the measurement to the range observed. */ + float fx = (float) x / (QMC5883L.xhigh - QMC5883L.xlow); + float fy = (float) y / (QMC5883L.yhigh - QMC5883L.ylow); + + x = -atan2(fy, fx) * 180.0 / M_PI; + x += 180; // no negative numbers + QMC5883L.HG = x; + + // calculate scalar magnetic induction + QMC5883L.scalar = sqrt((QMC5883L.MX * QMC5883L.MX) + (QMC5883L.MY * QMC5883L.MY) + (QMC5883L.MZ * QMC5883L.MZ)); + + // get temperature + if (readRegister(QMC5883L_TEMP_LSB, 2) != 2) return; // read error + int16_t t = 0; + t = Wire.read() | (Wire.read() << 8); + QMC5883L.temp = (t / 100) + USE_QMC5883L_Temp; +} + +/*********************************************************************************************\ + * 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_HG "{m}%d " D_UNIT_DEGREE "{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) + { + if (!QMC5883L.ready) + { + AddLog(LOG_LEVEL_INFO, PSTR("QMC5883L: " D_ERROR " %x" ), QMC5883L.status); + return; + } + else + { + ResponseAppend_P(PSTR(",\"QMC5883L\":{\"" D_JSON_MX "\":%d,\"" D_JSON_MY "\":%d,\"" D_JSON_MZ "\":%d,\"" D_JSON_MAGNETICFLD "\":%u,\"" D_JSON_HEADING "\":%d,\"" D_JSON_TEMPERATURE "\":%d}"), QMC5883L.MX, QMC5883L.MY, QMC5883L.MZ, QMC5883L.scalar, QMC5883L.HG, QMC5883L.temp); + } + } +#ifdef USE_WEBSERVER + else + { + switch(QMC5883L.ready) + { + case true: + WSContentSend_PD(HTTP_SNS_QMC5883L, QMC5883L.MX, QMC5883L.MY, QMC5883L.MZ, QMC5883L.scalar, QMC5883L.HG, QMC5883L.temp); + break; + case false: + WSContentSend_PD(HTTP_SNS_QMC5883L_ERROR, D_START); + break; + default: + WSContentSend_PD(HTTP_SNS_QMC5883L_ERROR, D_ERROR); + } + } +#endif +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xsns99(byte function) +{ + if (!I2cEnabled(XI2C_69)) { return false; } + + bool result = false; + + if (FUNC_INIT == function) { + QMC5883L_Init(); + } + else if (QMC5883L.ready) { + 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 result; +} +#endif // USE_QMC5883L +#endif // USE_I2C \ No newline at end of file From 49f0f259eaeb62b62dbf1e09970b2a47f1d22d62 Mon Sep 17 00:00:00 2001 From: Helge Date: Sun, 2 Oct 2022 21:49:36 +0200 Subject: [PATCH 02/16] Update my_user_config.h --- tasmota/my_user_config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index a31228cf0..84fa35434 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -715,8 +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_ // have a compass sensor - #define USE_QMC5883L_Temp 22 // compass sensor temperatur are not calibrated (only relativ measurement) and need an absolute ground value in °C (see datasheet) +#define USE_QMC5883L // USE_QMC5883L compass sensor +#define USE_QMC5883L_Temp 22 // compass sensor temperatur are not calibrated (only relativ measurement) and need an absolute ground value in °C (see datasheet) #endif // USE_I2C From 0c123e131fb0642f7f7b6d2c8b4b552b6b530fae Mon Sep 17 00:00:00 2001 From: Helge Date: Sun, 2 Oct 2022 22:21:18 +0200 Subject: [PATCH 03/16] Update xsns_33_qmc5883l.ino --- tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino index be66649e3..e34682db7 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino @@ -364,9 +364,12 @@ void QMC5883L_Show(uint8_t json) * Interface \*********************************************************************************************/ -bool Xsns99(byte function) +bool Xsns33(byte function) { - if (!I2cEnabled(XI2C_69)) { return false; } + if (!I2cEnabled(XI2C_71)) + { + return false; + } bool result = false; From 125bfafc88269d46b6c9a0cb4c2071622141c2c2 Mon Sep 17 00:00:00 2001 From: Helge Date: Sun, 2 Oct 2022 23:44:40 +0200 Subject: [PATCH 04/16] adaption of languages files --- tasmota/language/af_AF.h | 8 ++++++++ tasmota/language/bg_BG.h | 8 ++++++++ tasmota/language/ca_AD.h | 8 ++++++++ tasmota/language/cs_CZ.h | 8 ++++++++ tasmota/language/de_DE.h | 2 +- tasmota/language/el_GR.h | 8 ++++++++ tasmota/language/en_GB.h | 2 +- tasmota/language/es_ES.h | 8 ++++++++ tasmota/language/fr_FR.h | 8 ++++++++ tasmota/language/fy_NL.h | 8 ++++++++ tasmota/language/he_HE.h | 8 ++++++++ tasmota/language/hu_HU.h | 8 ++++++++ tasmota/language/it_IT.h | 8 ++++++++ tasmota/language/ko_KO.h | 8 ++++++++ tasmota/language/nl_NL.h | 8 ++++++++ tasmota/language/pl_PL.h | 8 ++++++++ tasmota/language/pt_BR.h | 8 ++++++++ tasmota/language/pt_PT.h | 8 ++++++++ tasmota/language/ro_RO.h | 8 ++++++++ tasmota/language/ru_RU.h | 8 ++++++++ tasmota/language/sk_SK.h | 8 ++++++++ tasmota/language/sv_SE.h | 8 ++++++++ tasmota/language/tr_TR.h | 8 ++++++++ tasmota/language/uk_UA.h | 8 ++++++++ tasmota/language/vi_VN.h | 8 ++++++++ tasmota/language/zh_CN.h | 8 ++++++++ tasmota/language/zh_TW.h | 8 ++++++++ 27 files changed, 202 insertions(+), 2 deletions(-) diff --git a/tasmota/language/af_AF.h b/tasmota/language/af_AF.h index 72fe31896..aa699bac0 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Verwyder gewig" #define D_HX_CAL_REFERENCE "Laai verwysingsgewig" @@ -911,6 +918,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 949dbdb16..a7ab9f6d2 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Жироскоп - ос Y" #define D_GZ_AXIS "Жироскоп - ос Z" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Премахване на тегло" #define D_HX_CAL_REFERENCE "Поставяне на еталонна тежест" @@ -911,6 +918,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 bbdb4eee1..591cf68f2 100644 --- a/tasmota/language/ca_AD.h +++ b/tasmota/language/ca_AD.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Treu el pes" #define D_HX_CAL_REFERENCE "Posa el pes de referència" @@ -911,6 +918,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 71d42ddfc..2820a5fdb 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro osa-Y" #define D_GZ_AXIS "Gyro osa-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Odstraňte zátěž" #define D_HX_CAL_REFERENCE "Vložte referenční zátěž" @@ -911,6 +918,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 7f07b5a08..e6ddf1712 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -918,7 +918,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" -#define D_UNIT_MICROTESLA "uT" +#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 de7e19335..6a61a9db1 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Απομακρύνετε το βαρίδιο" #define D_HX_CAL_REFERENCE "Τοποθετήστε το βαρίδιο αναφοράς" @@ -911,6 +918,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 90b9b6ade..e20ffc432 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -918,7 +918,7 @@ #define D_UNIT_MICROMETER "µm" #define D_UNIT_MICROSECOND "µs" #define D_UNIT_MICROSIEMENS_PER_CM "µS/cm" -#define D_UNIT_MICROTESLA "uT" +#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 e9a5c46fe..540a98cd6 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Girós. Eje Y" #define D_GZ_AXIS "Girós. Eje Z" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remover Peso" #define D_HX_CAL_REFERENCE "Poner Peso de Referencia" @@ -911,6 +918,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 b94af9891..7c3d2bc37 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Axe-Y" #define D_GZ_AXIS "Gyro Axe-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Retirer la charge" #define D_HX_CAL_REFERENCE "Charger l'étalon de poids" @@ -911,6 +918,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 fbe031e89..613202110 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-as" #define D_GZ_AXIS "Gyro Z-as" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Gewicht fuortsmite" #define D_HX_CAL_REFERENCE "Pleats kalibraasje gewicht" @@ -911,6 +918,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 6c5cbb225..1bf4a13f0 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "הסר משקל" #define D_HX_CAL_REFERENCE "טען משקל התייחסות" @@ -911,6 +918,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 d31d0957d..7509d2c9e 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Giroszkóp Y-tengely" #define D_GZ_AXIS "Giroszkóp Z-tengely" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // 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" @@ -911,6 +918,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 ba49afae4..81600584a 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Giroscopio asse Y" #define D_GZ_AXIS "Giroscopio asse Z" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Rimuovi peso" #define D_HX_CAL_REFERENCE "Carica riferimento peso" @@ -911,6 +918,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 92400dfe5..556f76192 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "중량 제거" #define D_HX_CAL_REFERENCE "참조 중량 로드" @@ -911,6 +918,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 729aa5e0e..4614013aa 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-as" #define D_GZ_AXIS "Gyro Z-as" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Verwijder gewicht" #define D_HX_CAL_REFERENCE "Plaats ijkgewicht" @@ -911,6 +918,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 fa9c391c2..070428d88 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Odchylenie Oś-Y" #define D_GZ_AXIS "Odchylenie Oś-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Usuń wagę" #define D_HX_CAL_REFERENCE "Załaduj wagę referencyjną" @@ -911,6 +918,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 b845055a4..1a7e8e14a 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Giro Eixo-Y" #define D_GZ_AXIS "Giro Eixo-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remover calibragem" #define D_HX_CAL_REFERENCE "Peso de referência de carga" @@ -911,6 +918,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 a473a6b7f..7b648706b 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remover peso" #define D_HX_CAL_REFERENCE "Carregar peso de referência" @@ -911,6 +918,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 93f2381b1..74f8b0b80 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Axa-Y" #define D_GZ_AXIS "Gyro Axa-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Elimină greutatea" #define D_HX_CAL_REFERENCE "Așează greutatea de referință" @@ -911,6 +918,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 81e66fa2c..416354954 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remove weight" #define D_HX_CAL_REFERENCE "Load reference weight" @@ -911,6 +918,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 f1a60f325..41865358e 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro os-Y" #define D_GZ_AXIS "Gyro os-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Odstráňte záťaž" #define D_HX_CAL_REFERENCE "Vložte referenčnú záťaž" @@ -911,6 +918,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 fa52fe7fe..8ce2fc270 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axel" #define D_GZ_AXIS "Gyro Z-Axel" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Ta bort vikter" #define D_HX_CAL_REFERENCE "Ladda referensvikt" @@ -911,6 +918,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 90337d4cb..3be903a0a 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remove weight" #define D_HX_CAL_REFERENCE "Load reference weight" @@ -911,6 +918,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 8258e3a0a..33962835f 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Орієнт Вісь-Y" #define D_GZ_AXIS "Орієнт Вісь-Z" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remove weight" #define D_HX_CAL_REFERENCE "Load reference weight" @@ -911,6 +918,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 3422ab65d..6400fc55a 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "Gyro Y-Axis" #define D_GZ_AXIS "Gyro Z-Axis" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "Remove weight" #define D_HX_CAL_REFERENCE "Load reference weight" @@ -911,6 +918,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 c06627648..297097b84 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "绕Y轴旋转的角速度" #define D_GZ_AXIS "绕Z轴旋转的角速度" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "去除重量" #define D_HX_CAL_REFERENCE "加载参考重量" @@ -911,6 +918,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 00b247f74..b780ef98b 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -564,6 +564,13 @@ #define D_GY_AXIS "陀螺儀 Y-軸" #define D_GZ_AXIS "陀螺儀 Z-軸" +// xsns_33_QMC5883L.ino +#define D_MX "Compass X-Axis" +#define D_MY "Compass Y-Axis" +#define D_MZ "Compass Z-Axis" +#define D_HG "Compass Heading" +#define D_MAGNETICFLD "Magnetic Field Strength" + // xsns_34_hx711.ino #define D_HX_CAL_REMOVE "移除重量" #define D_HX_CAL_REFERENCE "載入參考重量" @@ -911,6 +918,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" From f8ce06b339f4f2efae499e0c0a79ee8b7a00c44a Mon Sep 17 00:00:00 2001 From: Helge Date: Mon, 3 Oct 2022 12:10:40 +0200 Subject: [PATCH 05/16] Update my_user_config.h --- tasmota/my_user_config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 84fa35434..df2414b26 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -715,8 +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 compass sensor -#define USE_QMC5883L_Temp 22 // compass sensor temperatur are not calibrated (only relativ measurement) and need an absolute ground value in °C (see datasheet) + #define USE_QMC5883L // USE_QMC5883L compass sensor + #define USE_QMC5883L_Temp 22 // compass sensor temperatur are not calibrated (only relativ measurement) and need an absolute ground value in °C (see datasheet) #endif // USE_I2C From e20428f50cef6c3e7fabf39b3ae120c050bdbc17 Mon Sep 17 00:00:00 2001 From: Helge Date: Mon, 3 Oct 2022 13:39:18 +0200 Subject: [PATCH 06/16] Update my_user_config.h deactivate the driver --- tasmota/my_user_config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index df2414b26..6423a165b 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -715,8 +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 compass sensor - #define USE_QMC5883L_Temp 22 // compass sensor temperatur are not calibrated (only relativ measurement) and need an absolute ground value in °C (see datasheet) +// #define USE_QMC5883L // USE_QMC5883L compass sensor +// #define USE_QMC5883L_Temp 22 // compass sensor temperatur are not calibrated (only relativ measurement) and need an absolute ground value in °C (see datasheet) #endif // USE_I2C From 53ff032fdc6f34b1827223f25f87ec3ae799be66 Mon Sep 17 00:00:00 2001 From: Helge Date: Mon, 3 Oct 2022 14:02:24 +0200 Subject: [PATCH 07/16] Update my_user_config.h --- tasmota/my_user_config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 6423a165b..92301bfc8 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -715,8 +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 compass sensor -// #define USE_QMC5883L_Temp 22 // compass sensor temperatur are not calibrated (only relativ measurement) and need an absolute ground value in °C (see datasheet) + #define USE_QMC5883L // USE_QMC5883L compass sensor + #define USE_QMC5883L_Temp 22 // compass sensor temperatur are not calibrated (only relativ measurement) and need an absolute ground value in °C (see datasheet) #endif // USE_I2C From 92eab2cc9f453fd12e316383886b80ea74f56ba6 Mon Sep 17 00:00:00 2001 From: Helge Date: Mon, 3 Oct 2022 20:42:28 +0200 Subject: [PATCH 08/16] Update xsns_33_qmc5883l.ino remove some warnings --- .../tasmota_xsns_sensor/xsns_33_qmc5883l.ino | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino index e34682db7..7d9536791 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino @@ -266,7 +266,7 @@ void QMC5883L_Init() //Read the magnetic data void QMC5883L_read_data(void) { - if(!QMC5883L.ready) return; + if(QMC5883L.ready != true) return; // check if chip is ready to provice data if (!readRegister(QMC5883L_STATUS, 1)) return; // read error @@ -324,7 +324,7 @@ const char HTTP_SNS_QMC5883L[] PROGMEM = "{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}"; + "{s}QMC5883L {m} %s {e}"; #endif @@ -332,7 +332,7 @@ void QMC5883L_Show(uint8_t json) { if (json) { - if (!QMC5883L.ready) + if (QMC5883L.ready != true) { AddLog(LOG_LEVEL_INFO, PSTR("QMC5883L: " D_ERROR " %x" ), QMC5883L.status); return; @@ -345,17 +345,14 @@ void QMC5883L_Show(uint8_t json) #ifdef USE_WEBSERVER else { - switch(QMC5883L.ready) + if (QMC5883L.ready != true) { - case true: - WSContentSend_PD(HTTP_SNS_QMC5883L, QMC5883L.MX, QMC5883L.MY, QMC5883L.MZ, QMC5883L.scalar, QMC5883L.HG, QMC5883L.temp); - break; - case false: - WSContentSend_PD(HTTP_SNS_QMC5883L_ERROR, D_START); - break; - default: - WSContentSend_PD(HTTP_SNS_QMC5883L_ERROR, D_ERROR); + WSContentSend_PD(HTTP_SNS_QMC5883L_ERROR, D_ERROR); } + else + { + WSContentSend_PD(HTTP_SNS_QMC5883L, QMC5883L.MX, QMC5883L.MY, QMC5883L.MZ, QMC5883L.scalar, QMC5883L.HG, QMC5883L.temp); + } } #endif } @@ -371,13 +368,14 @@ bool Xsns33(byte function) return false; } - bool result = false; - if (FUNC_INIT == function) { QMC5883L_Init(); } - else if (QMC5883L.ready) { - switch (function) { + else + if (QMC5883L.ready == true) + { + switch (function) + { case FUNC_JSON_APPEND: QMC5883L_Show(1); break; @@ -391,7 +389,7 @@ bool Xsns33(byte function) #endif // USE_WEBSERVER } } - return result; + return true; } #endif // USE_QMC5883L #endif // USE_I2C \ No newline at end of file From 3e9549b6fea3670585aac193440b4252c07d888b Mon Sep 17 00:00:00 2001 From: Helge Date: Mon, 3 Oct 2022 22:11:59 +0200 Subject: [PATCH 09/16] Update xsns_33_qmc5883l.ino replace self written function by existing one (I2C) --- .../tasmota_xsns_sensor/xsns_33_qmc5883l.ino | 62 ++++++++----------- 1 file changed, 26 insertions(+), 36 deletions(-) diff --git a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino index 7d9536791..d3efaa80e 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino @@ -230,36 +230,19 @@ bool ready = false; uint8_t i2c_address = QMC5883L_ADDR; } QMC5883L; -void writeRegister(uint8_t reg, uint8_t val) -{ - Wire.beginTransmission(QMC5883L.i2c_address); // start talking - Wire.write(reg); - Wire.write(val); - Wire.endTransmission(); -} - -int readRegister(uint8_t reg, uint8_t count) -{ - Wire.beginTransmission(QMC5883L.i2c_address); - Wire.write(reg); - Wire.endTransmission(); - - Wire.requestFrom(QMC5883L.i2c_address, count); - int n = Wire.available(); - if (n != count) return 0; - return n; -} - // Initialise the device void QMC5883L_Init() { if (!I2cSetDevice(QMC5883L.i2c_address)) { return; } I2cSetActiveFound(QMC5883L.i2c_address, "QMC5883L"); // reset QMC5883L - writeRegister(QMC5883L_CONFIG2,QMC5883L_CONFIG2_RESET); // Software Reset - writeRegister(QMC5883L_RESET, 0x01); + if (I2cWrite8(QMC5883L.i2c_address, QMC5883L_CONFIG2, QMC5883L_CONFIG2_RESET) == false) return; // Software Reset + // writeRegister(QMC5883L_CONFIG2,QMC5883L_CONFIG2_RESET); // Software Reset + //writeRegister(QMC5883L_RESET, 0x01); + if (I2cWrite8(QMC5883L.i2c_address, QMC5883L_RESET, 0x01) == false) return; // write config - writeRegister(QMC5883L_CONFIG, QMC5883L_CONFIG_OS256 | QMC5883L_CONFIG_8GAUSS | QMC5883L_CONFIG_10HZ | QMC5883L_CONFIG_CONT); + //writeRegister(QMC5883L_CONFIG, QMC5883L_CONFIG_OS256 | QMC5883L_CONFIG_8GAUSS | QMC5883L_CONFIG_10HZ | QMC5883L_CONFIG_CONT); + if (I2cWrite8(QMC5883L.i2c_address, QMC5883L_CONFIG, QMC5883L_CONFIG_OS256 | QMC5883L_CONFIG_8GAUSS | QMC5883L_CONFIG_10HZ | QMC5883L_CONFIG_CONT) == false) return; QMC5883L.ready = true; } @@ -267,16 +250,23 @@ void QMC5883L_Init() void QMC5883L_read_data(void) { if(QMC5883L.ready != true) return; - + uint8_t data = 0; // check if chip is ready to provice data - if (!readRegister(QMC5883L_STATUS, 1)) return; // read error - if (!(Wire.read() & QMC5883L_STATUS_DRDY)) return; // chip not yet ready, next round try again + //if (!readRegister(QMC5883L_STATUS, 1)) return; // read error + if (!I2cValidRead8(&data, QMC5883L.i2c_address, QMC5883L_STATUS)) return; // read error + + //if (!(Wire.read() & QMC5883L_STATUS_DRDY)) return; // chip not yet ready, next round try again + if (!(data & QMC5883L_STATUS_DRDY)) return; // chip not yet ready, next round try again // QMC5883 reading data - if (readRegister(QMC5883L_X_LSB, 6) != 6) return; // read error, select LSB register - QMC5883L.MX = Wire.read() | (Wire.read() << 8); - QMC5883L.MY = Wire.read() | (Wire.read() << 8); - QMC5883L.MZ = Wire.read() | (Wire.read() << 8); + //if (readRegister(QMC5883L_X_LSB, 6) != 6) return; // read error, select LSB register + //QMC5883L.MX = Wire.read() | (Wire.read() << 8); + //QMC5883L.MY = Wire.read() | (Wire.read() << 8); + //QMC5883L.MZ = Wire.read() | (Wire.read() << 8); + + if (I2cValidReadS16(&QMC5883L.MX, QMC5883L.i2c_address, QMC5883L_X_LSB) == false) return; // read error, select LSB register + if (I2cValidReadS16(&QMC5883L.MY, QMC5883L.i2c_address, QMC5883L_Y_LSB) == false) return; // read error, select LSB register + if (I2cValidReadS16(&QMC5883L.MZ, QMC5883L.i2c_address, QMC5883L_Z_LSB) == false) return; // read error, select LSB register int16_t x = QMC5883L.MX; int16_t y = QMC5883L.MY; @@ -302,12 +292,12 @@ void QMC5883L_read_data(void) // calculate scalar magnetic induction QMC5883L.scalar = sqrt((QMC5883L.MX * QMC5883L.MX) + (QMC5883L.MY * QMC5883L.MY) + (QMC5883L.MZ * QMC5883L.MZ)); - - // get temperature - if (readRegister(QMC5883L_TEMP_LSB, 2) != 2) return; // read error - int16_t t = 0; - t = Wire.read() | (Wire.read() << 8); - QMC5883L.temp = (t / 100) + USE_QMC5883L_Temp; + + // get temperature + //if (readRegister(QMC5883L_TEMP_LSB, 2) != 2) return; // read error + if (I2cValidReadS16(&QMC5883L.temp, QMC5883L.i2c_address, QMC5883L_TEMP_LSB) == false) return; // read error, select LSB register + //t = Wire.read() | (Wire.read() << 8); + QMC5883L.temp = (QMC5883L.temp / 100) + USE_QMC5883L_Temp; } /*********************************************************************************************\ From d5bc687844948760526c3842cc4e355a253a1d5b Mon Sep 17 00:00:00 2001 From: Helge Date: Tue, 4 Oct 2022 07:43:34 +0200 Subject: [PATCH 10/16] Update xsns_33_qmc5883l.ino --- tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino index d3efaa80e..5f8878860 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino @@ -264,12 +264,15 @@ void QMC5883L_read_data(void) //QMC5883L.MY = Wire.read() | (Wire.read() << 8); //QMC5883L.MZ = Wire.read() | (Wire.read() << 8); - if (I2cValidReadS16(&QMC5883L.MX, QMC5883L.i2c_address, QMC5883L_X_LSB) == false) return; // read error, select LSB register - if (I2cValidReadS16(&QMC5883L.MY, QMC5883L.i2c_address, QMC5883L_Y_LSB) == false) return; // read error, select LSB register + int16_t x = 0; + int16_t y = 0; + + if (I2cValidReadS16(&x, QMC5883L.i2c_address, QMC5883L_X_LSB) == false) return; // read error, select LSB register + if (I2cValidReadS16(&y, QMC5883L.i2c_address, QMC5883L_Y_LSB) == false) return; // read error, select LSB register if (I2cValidReadS16(&QMC5883L.MZ, QMC5883L.i2c_address, QMC5883L_Z_LSB) == false) return; // read error, select LSB register - int16_t x = QMC5883L.MX; - int16_t y = QMC5883L.MY; + QMC5883L.MX = x; + QMC5883L.MY = y; // calculate azimut, heading if(x < QMC5883L.xlow) QMC5883L.xlow = x; From 5998fe856a588712a46b99b9be0dd39e2c25f7cd Mon Sep 17 00:00:00 2001 From: Helge Date: Tue, 4 Oct 2022 15:48:27 +0200 Subject: [PATCH 11/16] added code recommendations and reduce functionality to the most necessary --- tasmota/include/i18n.h | 8 +- tasmota/language/af_AF.h | 9 +- tasmota/language/bg_BG.h | 9 +- tasmota/language/ca_AD.h | 9 +- tasmota/language/cs_CZ.h | 9 +- tasmota/language/de_DE.h | 9 +- tasmota/language/el_GR.h | 9 +- tasmota/language/en_GB.h | 9 +- tasmota/language/es_ES.h | 9 +- tasmota/language/fr_FR.h | 9 +- tasmota/language/fy_NL.h | 9 +- tasmota/language/he_HE.h | 9 +- tasmota/language/hu_HU.h | 9 +- tasmota/language/it_IT.h | 9 +- tasmota/language/ko_KO.h | 9 +- tasmota/language/nl_NL.h | 9 +- tasmota/language/pl_PL.h | 9 +- tasmota/language/pt_BR.h | 9 +- tasmota/language/pt_PT.h | 9 +- tasmota/language/ro_RO.h | 9 +- tasmota/language/ru_RU.h | 9 +- tasmota/language/sk_SK.h | 9 +- tasmota/language/sv_SE.h | 9 +- tasmota/language/tr_TR.h | 9 +- tasmota/language/uk_UA.h | 9 +- tasmota/language/vi_VN.h | 9 +- tasmota/language/zh_CN.h | 9 +- tasmota/language/zh_TW.h | 9 +- tasmota/my_user_config.h | 4 +- .../tasmota_xsns_sensor/xsns_33_qmc5883l.ino | 150 +++++------------- 30 files changed, 157 insertions(+), 248 deletions(-) diff --git a/tasmota/include/i18n.h b/tasmota/include/i18n.h index 380913bfb..b7c139f1d 100644 --- a/tasmota/include/i18n.h +++ b/tasmota/include/i18n.h @@ -233,12 +233,10 @@ #define D_JSON_SIGNALSTRENGTH "SignalStrength" #define D_JSON_CHIPTEMPERATURE "ChipTemperature" #define D_JSON_RAW "Raw" -#define D_JSON_MX "Compass X-Axis" -#define D_JSON_MY "Compass Y-Axis" -#define D_JSON_MZ "Compass Z-Axis" -#define D_JSON_HEADING "Compass Heading" +#define D_JSON_MX "Induction X-Axis" +#define D_JSON_MY "Induction Y-Axis" +#define D_JSON_MZ "Induction Z-Axis" #define D_JSON_MAGNETICFLD "Magnetic Induction" - #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 aa699bac0..66b21106f 100644 --- a/tasmota/language/af_AF.h +++ b/tasmota/language/af_AF.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/bg_BG.h b/tasmota/language/bg_BG.h index a7ab9f6d2..ceaa474d5 100644 --- a/tasmota/language/bg_BG.h +++ b/tasmota/language/bg_BG.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Жироскоп - ос Z" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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 "Премахване на тегло" diff --git a/tasmota/language/ca_AD.h b/tasmota/language/ca_AD.h index 591cf68f2..8e7140b5e 100644 --- a/tasmota/language/ca_AD.h +++ b/tasmota/language/ca_AD.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/cs_CZ.h b/tasmota/language/cs_CZ.h index 2820a5fdb..9fd2f8248 100644 --- a/tasmota/language/cs_CZ.h +++ b/tasmota/language/cs_CZ.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro osa-Z" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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ěž" diff --git a/tasmota/language/de_DE.h b/tasmota/language/de_DE.h index e6ddf1712..956229518 100644 --- a/tasmota/language/de_DE.h +++ b/tasmota/language/de_DE.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyroskop Z-Achse" // xsns_33_QMC5883L.ino -#define D_MX "Kompass X-Achse" -#define D_MY "Kompass Y-Achse" -#define D_MZ "Kompass Z-Achse" -#define D_HG "Kompass Richtung" -#define D_MAGNETICFLD "Magnet Feld Stärke" +#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" diff --git a/tasmota/language/el_GR.h b/tasmota/language/el_GR.h index 6a61a9db1..a4851ae11 100644 --- a/tasmota/language/el_GR.h +++ b/tasmota/language/el_GR.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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 "Απομακρύνετε το βαρίδιο" diff --git a/tasmota/language/en_GB.h b/tasmota/language/en_GB.h index e20ffc432..e6ca68def 100644 --- a/tasmota/language/en_GB.h +++ b/tasmota/language/en_GB.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/es_ES.h b/tasmota/language/es_ES.h index 540a98cd6..ed4b489b3 100644 --- a/tasmota/language/es_ES.h +++ b/tasmota/language/es_ES.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Girós. Eje Z" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/fr_FR.h b/tasmota/language/fr_FR.h index 7c3d2bc37..d6a430c41 100644 --- a/tasmota/language/fr_FR.h +++ b/tasmota/language/fr_FR.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Axe-Z" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/fy_NL.h b/tasmota/language/fy_NL.h index 613202110..a6208237a 100644 --- a/tasmota/language/fy_NL.h +++ b/tasmota/language/fy_NL.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-as" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/he_HE.h b/tasmota/language/he_HE.h index 1bf4a13f0..5216aac11 100644 --- a/tasmota/language/he_HE.h +++ b/tasmota/language/he_HE.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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 "הסר משקל" diff --git a/tasmota/language/hu_HU.h b/tasmota/language/hu_HU.h index 7509d2c9e..acd1c8b4f 100644 --- a/tasmota/language/hu_HU.h +++ b/tasmota/language/hu_HU.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Giroszkóp Z-tengely" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 81600584a..d4be235c9 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Giroscopio asse Z" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/ko_KO.h b/tasmota/language/ko_KO.h index 556f76192..807a8361c 100644 --- a/tasmota/language/ko_KO.h +++ b/tasmota/language/ko_KO.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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 "중량 제거" diff --git a/tasmota/language/nl_NL.h b/tasmota/language/nl_NL.h index 4614013aa..444f68ad1 100644 --- a/tasmota/language/nl_NL.h +++ b/tasmota/language/nl_NL.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-as" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/pl_PL.h b/tasmota/language/pl_PL.h index 070428d88..a42b55268 100644 --- a/tasmota/language/pl_PL.h +++ b/tasmota/language/pl_PL.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Odchylenie Oś-Z" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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ę" diff --git a/tasmota/language/pt_BR.h b/tasmota/language/pt_BR.h index 1a7e8e14a..91445badc 100644 --- a/tasmota/language/pt_BR.h +++ b/tasmota/language/pt_BR.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Giro Eixo-Z" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/pt_PT.h b/tasmota/language/pt_PT.h index 7b648706b..f05bded39 100644 --- a/tasmota/language/pt_PT.h +++ b/tasmota/language/pt_PT.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/ro_RO.h b/tasmota/language/ro_RO.h index 74f8b0b80..691aa97fe 100644 --- a/tasmota/language/ro_RO.h +++ b/tasmota/language/ro_RO.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Axa-Z" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/ru_RU.h b/tasmota/language/ru_RU.h index 416354954..fb2e7c1bf 100644 --- a/tasmota/language/ru_RU.h +++ b/tasmota/language/ru_RU.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/sk_SK.h b/tasmota/language/sk_SK.h index 41865358e..429d93b3c 100644 --- a/tasmota/language/sk_SK.h +++ b/tasmota/language/sk_SK.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro os-Z" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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ž" diff --git a/tasmota/language/sv_SE.h b/tasmota/language/sv_SE.h index 8ce2fc270..e4f1c79b2 100644 --- a/tasmota/language/sv_SE.h +++ b/tasmota/language/sv_SE.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axel" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/tr_TR.h b/tasmota/language/tr_TR.h index 3be903a0a..d840fa46d 100644 --- a/tasmota/language/tr_TR.h +++ b/tasmota/language/tr_TR.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/uk_UA.h b/tasmota/language/uk_UA.h index 33962835f..dc0746fb9 100644 --- a/tasmota/language/uk_UA.h +++ b/tasmota/language/uk_UA.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Орієнт Вісь-Z" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/vi_VN.h b/tasmota/language/vi_VN.h index 6400fc55a..92b740fc4 100644 --- a/tasmota/language/vi_VN.h +++ b/tasmota/language/vi_VN.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "Gyro Z-Axis" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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" diff --git a/tasmota/language/zh_CN.h b/tasmota/language/zh_CN.h index 297097b84..ccce4ca77 100644 --- a/tasmota/language/zh_CN.h +++ b/tasmota/language/zh_CN.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "绕Z轴旋转的角速度" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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 "去除重量" diff --git a/tasmota/language/zh_TW.h b/tasmota/language/zh_TW.h index b780ef98b..de5987d13 100644 --- a/tasmota/language/zh_TW.h +++ b/tasmota/language/zh_TW.h @@ -565,11 +565,10 @@ #define D_GZ_AXIS "陀螺儀 Z-軸" // xsns_33_QMC5883L.ino -#define D_MX "Compass X-Axis" -#define D_MY "Compass Y-Axis" -#define D_MZ "Compass Z-Axis" -#define D_HG "Compass Heading" -#define D_MAGNETICFLD "Magnetic Field Strength" +#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 "移除重量" diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 92301bfc8..b3b76f260 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -715,8 +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 compass sensor - #define USE_QMC5883L_Temp 22 // compass sensor temperatur are not calibrated (only relativ measurement) and need an absolute ground value in °C (see datasheet) + #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 index 5f8878860..596311d2e 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino @@ -214,93 +214,50 @@ /* Mode values for the CONFIG2 register */ #define QMC5883L_CONFIG2_RESET 0b10000000 -/* Apparently M_PI isn't available in all environments. */ -#ifndef M_PI -#define M_PI 3.14159265358979323846264338327950288 -#endif + // data field +struct QMC5883L_s +{ + int16_t MX, MY, MZ; + int16_t temp; + uint16_t scalar; +} *QMC5883L = nullptr; -// data field -struct { -int16_t MX = 0, MY = 0, MZ = 0, HG = 0; -int16_t xhigh = 0, yhigh = 0, xlow = 0, ylow = 0; -int16_t temp = 0; -uint16_t scalar = 0; -uint8_t status; -bool ready = false; -uint8_t i2c_address = QMC5883L_ADDR; -} QMC5883L; // Initialise the device void QMC5883L_Init() { - if (!I2cSetDevice(QMC5883L.i2c_address)) { return; } - I2cSetActiveFound(QMC5883L.i2c_address, "QMC5883L"); + if (!I2cSetDevice(QMC5883L_ADDR)) + { + return; + } + I2cSetActiveFound(QMC5883L_ADDR, "QMC5883L"); // reset QMC5883L - if (I2cWrite8(QMC5883L.i2c_address, QMC5883L_CONFIG2, QMC5883L_CONFIG2_RESET) == false) return; // Software Reset - // writeRegister(QMC5883L_CONFIG2,QMC5883L_CONFIG2_RESET); // Software Reset - //writeRegister(QMC5883L_RESET, 0x01); - if (I2cWrite8(QMC5883L.i2c_address, QMC5883L_RESET, 0x01) == false) return; + if (I2cWrite8(QMC5883L_ADDR, QMC5883L_CONFIG2, QMC5883L_CONFIG2_RESET) == false) + return; // Software Reset + if (I2cWrite8(QMC5883L_ADDR, QMC5883L_RESET, 0x01) == false) + return; // write config - //writeRegister(QMC5883L_CONFIG, QMC5883L_CONFIG_OS256 | QMC5883L_CONFIG_8GAUSS | QMC5883L_CONFIG_10HZ | QMC5883L_CONFIG_CONT); - if (I2cWrite8(QMC5883L.i2c_address, QMC5883L_CONFIG, QMC5883L_CONFIG_OS256 | QMC5883L_CONFIG_8GAUSS | QMC5883L_CONFIG_10HZ | QMC5883L_CONFIG_CONT) == false) return; - QMC5883L.ready = true; + 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) { - if(QMC5883L.ready != true) return; - uint8_t data = 0; // check if chip is ready to provice data - //if (!readRegister(QMC5883L_STATUS, 1)) return; // read error - if (!I2cValidRead8(&data, QMC5883L.i2c_address, QMC5883L_STATUS)) return; // read error - - //if (!(Wire.read() & QMC5883L_STATUS_DRDY)) return; // chip not yet ready, next round try again - if (!(data & QMC5883L_STATUS_DRDY)) return; // chip not yet ready, next round try again - - // QMC5883 reading data - //if (readRegister(QMC5883L_X_LSB, 6) != 6) return; // read error, select LSB register - //QMC5883L.MX = Wire.read() | (Wire.read() << 8); - //QMC5883L.MY = Wire.read() | (Wire.read() << 8); - //QMC5883L.MZ = Wire.read() | (Wire.read() << 8); + if (!(I2cRead8(QMC5883L_ADDR, QMC5883L_STATUS) & QMC5883L_STATUS_DRDY)) + return; // chip not yet ready, next round try again - int16_t x = 0; - int16_t y = 0; - - if (I2cValidReadS16(&x, QMC5883L.i2c_address, QMC5883L_X_LSB) == false) return; // read error, select LSB register - if (I2cValidReadS16(&y, QMC5883L.i2c_address, QMC5883L_Y_LSB) == false) return; // read error, select LSB register - if (I2cValidReadS16(&QMC5883L.MZ, QMC5883L.i2c_address, QMC5883L_Z_LSB) == false) return; // read error, select LSB register - - QMC5883L.MX = x; - QMC5883L.MY = y; - - // calculate azimut, heading - if(x < QMC5883L.xlow) QMC5883L.xlow = x; - if(x > QMC5883L.xhigh) QMC5883L.xhigh = x; - if(y < QMC5883L.ylow) QMC5883L.ylow = y; - if(y > QMC5883L.yhigh) QMC5883L.yhigh = y; - - /* Bail out if not enough data is available. */ - if( QMC5883L.xlow == QMC5883L.xhigh || QMC5883L.ylow == QMC5883L.yhigh ) return; - /* Recenter the measurement by subtracting the average */ - x -= (QMC5883L.xhigh + QMC5883L.xlow) / 2; - y -= (QMC5883L.yhigh + QMC5883L.ylow) / 2; - /* Rescale the measurement to the range observed. */ - float fx = (float) x / (QMC5883L.xhigh - QMC5883L.xlow); - float fy = (float) y / (QMC5883L.yhigh - QMC5883L.ylow); - - x = -atan2(fy, fx) * 180.0 / M_PI; - x += 180; // no negative numbers - QMC5883L.HG = x; + 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 - //if (readRegister(QMC5883L_TEMP_LSB, 2) != 2) return; // read error - if (I2cValidReadS16(&QMC5883L.temp, QMC5883L.i2c_address, QMC5883L_TEMP_LSB) == false) return; // read error, select LSB register - //t = Wire.read() | (Wire.read() << 8); - QMC5883L.temp = (QMC5883L.temp / 100) + USE_QMC5883L_Temp; + 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; } /*********************************************************************************************\ @@ -313,7 +270,6 @@ const char HTTP_SNS_QMC5883L[] PROGMEM = "{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_HG "{m}%d " D_UNIT_DEGREE "{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 = @@ -325,27 +281,13 @@ void QMC5883L_Show(uint8_t json) { if (json) { - if (QMC5883L.ready != true) - { - AddLog(LOG_LEVEL_INFO, PSTR("QMC5883L: " D_ERROR " %x" ), QMC5883L.status); - return; - } - else - { - ResponseAppend_P(PSTR(",\"QMC5883L\":{\"" D_JSON_MX "\":%d,\"" D_JSON_MY "\":%d,\"" D_JSON_MZ "\":%d,\"" D_JSON_MAGNETICFLD "\":%u,\"" D_JSON_HEADING "\":%d,\"" D_JSON_TEMPERATURE "\":%d}"), QMC5883L.MX, QMC5883L.MY, QMC5883L.MZ, QMC5883L.scalar, QMC5883L.HG, QMC5883L.temp); - } + 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 { - if (QMC5883L.ready != true) - { - WSContentSend_PD(HTTP_SNS_QMC5883L_ERROR, D_ERROR); - } - else - { - WSContentSend_PD(HTTP_SNS_QMC5883L, QMC5883L.MX, QMC5883L.MY, QMC5883L.MZ, QMC5883L.scalar, QMC5883L.HG, QMC5883L.temp); - } + + WSContentSend_PD(HTTP_SNS_QMC5883L, QMC5883L->MX, QMC5883L->MY, QMC5883L->MZ, QMC5883L->scalar, QMC5883L->temp); } #endif } @@ -361,26 +303,22 @@ bool Xsns33(byte function) return false; } - if (FUNC_INIT == function) { - QMC5883L_Init(); - } - else - if (QMC5883L.ready == true) + switch (function) { - switch (function) - { - case FUNC_JSON_APPEND: - QMC5883L_Show(1); - break; - case FUNC_EVERY_SECOND: - QMC5883L_read_data(); - break; + case FUNC_INIT: + QMC5883L_Init(); + break; + 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; + case FUNC_WEB_SENSOR: + QMC5883L_Show(0); + break; #endif // USE_WEBSERVER - } } return true; } From 3beeba7641dd9efd19f07f44eafe44257f705762 Mon Sep 17 00:00:00 2001 From: Helge Date: Tue, 4 Oct 2022 15:50:55 +0200 Subject: [PATCH 12/16] remove empty line --- tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino | 1 - 1 file changed, 1 deletion(-) diff --git a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino index 596311d2e..cdc5308ba 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino @@ -286,7 +286,6 @@ void QMC5883L_Show(uint8_t json) #ifdef USE_WEBSERVER else { - WSContentSend_PD(HTTP_SNS_QMC5883L, QMC5883L->MX, QMC5883L->MY, QMC5883L->MZ, QMC5883L->scalar, QMC5883L->temp); } #endif From 31c94424a9f28be07a243e92abbd2ebd8b2c3be3 Mon Sep 17 00:00:00 2001 From: Helge Date: Tue, 4 Oct 2022 17:39:06 +0200 Subject: [PATCH 13/16] Json name adaption + test config --- tasmota/include/i18n.h | 8 ++++---- tasmota/my_user_config.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tasmota/include/i18n.h b/tasmota/include/i18n.h index b7c139f1d..c96a02982 100644 --- a/tasmota/include/i18n.h +++ b/tasmota/include/i18n.h @@ -233,10 +233,10 @@ #define D_JSON_SIGNALSTRENGTH "SignalStrength" #define D_JSON_CHIPTEMPERATURE "ChipTemperature" #define D_JSON_RAW "Raw" -#define D_JSON_MX "Induction X-Axis" -#define D_JSON_MY "Induction Y-Axis" -#define D_JSON_MZ "Induction Z-Axis" -#define D_JSON_MAGNETICFLD "Magnetic Induction" +#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/my_user_config.h b/tasmota/my_user_config.h index b3b76f260..72c94467b 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -505,8 +505,8 @@ // -- Rules or Script ---------------------------- // Select none or only one of the below defines USE_RULES or USE_SCRIPT #define USE_RULES // Add support for rules (+8k code) -// #define USE_EXPRESSION // Add support for expression evaluation in rules (+3k2 code, +64 bytes mem) -// #define SUPPORT_IF_STATEMENT // Add support for IF statement in rules (+4k2 code, -332 bytes mem) + #define USE_EXPRESSION // Add support for expression evaluation in rules (+3k2 code, +64 bytes mem) + #define SUPPORT_IF_STATEMENT // Add support for IF statement in rules (+4k2 code, -332 bytes mem) // #define USER_RULE1 "" // Add rule1 data saved at initial firmware load or when command reset is executed // #define USER_RULE2 "" // Add rule2 data saved at initial firmware load or when command reset is executed // #define USER_RULE3 "" // Add rule3 data saved at initial firmware load or when command reset is executed From a7a26dc9a192e64a04263e45e28d80e9269e4bd6 Mon Sep 17 00:00:00 2001 From: Helge Date: Tue, 4 Oct 2022 18:16:49 +0200 Subject: [PATCH 14/16] added test of availabillty --- .../tasmota_xsns_sensor/xsns_33_qmc5883l.ino | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino index cdc5308ba..e64a3cc30 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino @@ -220,12 +220,15 @@ struct QMC5883L_s int16_t MX, MY, MZ; int16_t temp; uint16_t scalar; + bool ready; } *QMC5883L = nullptr; // Initialise the device void QMC5883L_Init() { + QMC5883L = (QMC5883L_s *)calloc(1, sizeof(struct QMC5883L_s)); + QMC5883L->ready = false; if (!I2cSetDevice(QMC5883L_ADDR)) { return; @@ -239,7 +242,7 @@ void QMC5883L_Init() // 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)); + QMC5883L->ready = true; } //Read the magnetic data @@ -301,12 +304,14 @@ bool Xsns33(byte function) { return false; } - - switch (function) + if (FUNC_INIT == function) { - case FUNC_INIT: - QMC5883L_Init(); - break; + QMC5883L_Init(); + } + else if (QMC5883L->ready == true) + { + switch (function) + { case FUNC_JSON_APPEND: QMC5883L_Show(1); break; @@ -318,6 +323,7 @@ bool Xsns33(byte function) QMC5883L_Show(0); break; #endif // USE_WEBSERVER + } } return true; } From a5f6983d075daa7be4aa9b0e2f5e258adf9d7ec0 Mon Sep 17 00:00:00 2001 From: Helge Date: Tue, 4 Oct 2022 18:29:54 +0200 Subject: [PATCH 15/16] set config back to default --- tasmota/my_user_config.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 72c94467b..77e301cd6 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -505,8 +505,8 @@ // -- Rules or Script ---------------------------- // Select none or only one of the below defines USE_RULES or USE_SCRIPT #define USE_RULES // Add support for rules (+8k code) - #define USE_EXPRESSION // Add support for expression evaluation in rules (+3k2 code, +64 bytes mem) - #define SUPPORT_IF_STATEMENT // Add support for IF statement in rules (+4k2 code, -332 bytes mem) +// #define USE_EXPRESSION // Add support for expression evaluation in rules (+3k2 code, +64 bytes mem) +// #define SUPPORT_IF_STATEMENT // Add support for IF statement in rules (+4k2 code, -332 bytes mem) // #define USER_RULE1 "" // Add rule1 data saved at initial firmware load or when command reset is executed // #define USER_RULE2 "" // Add rule2 data saved at initial firmware load or when command reset is executed // #define USER_RULE3 "" // Add rule3 data saved at initial firmware load or when command reset is executed @@ -715,8 +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) +// #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 From 7a267f627141b5527d91ba7919e994d4b747d1eb Mon Sep 17 00:00:00 2001 From: Helge Date: Tue, 4 Oct 2022 21:54:15 +0200 Subject: [PATCH 16/16] replace ready flag by nullptr check --- tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino index e64a3cc30..1122a389f 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_33_qmc5883l.ino @@ -220,15 +220,12 @@ struct QMC5883L_s int16_t MX, MY, MZ; int16_t temp; uint16_t scalar; - bool ready; } *QMC5883L = nullptr; // Initialise the device void QMC5883L_Init() { - QMC5883L = (QMC5883L_s *)calloc(1, sizeof(struct QMC5883L_s)); - QMC5883L->ready = false; if (!I2cSetDevice(QMC5883L_ADDR)) { return; @@ -242,7 +239,7 @@ void QMC5883L_Init() // write config if (I2cWrite8(QMC5883L_ADDR, QMC5883L_CONFIG, QMC5883L_CONFIG_OS256 | QMC5883L_CONFIG_8GAUSS | QMC5883L_CONFIG_100HZ | QMC5883L_CONFIG_CONT) == false) return; - QMC5883L->ready = true; + QMC5883L = (QMC5883L_s *)calloc(1, sizeof(struct QMC5883L_s)); } //Read the magnetic data @@ -308,7 +305,7 @@ bool Xsns33(byte function) { QMC5883L_Init(); } - else if (QMC5883L->ready == true) + else if (QMC5883L != nullptr) { switch (function) {